Après avoir utilisé grep sur un fichier html, j'obtiens la sortie suivante:
Réponses
Trop de publicités?Généralement, je conseillerais d'utiliser un parseur HTML approprié pour analyser du HTML.
Cependant, ces données semblent assez simples : en utilisant une double citation (suivie facultativement de "v") comme séparateur de champ, recueillez le 2ème champ de chaque ligne. Ensuite, joignez les morceaux avec des virgules.
résultat=$( grep ... file.html | awk -F'"v?' '{print $2}' | paste -sd, )
echo "http://x.y.z/$result.mp3"
En supposant que vous avez les données d'entrée de votre question stockées dans un fichier appelé data.txt
, vous pouvez utiliser cette commande pour générer l'URL :
grep -Po '\d+-\d+' data.txt | tr '\n' ',' | sed -r 's/(.*),$/http:\/\/x.y.z\/\1.mp3/'
Voici un exemple d'exécution :
$ grep -Po '\d+-\d+' data.txt | tr '\n' ',' | sed -r 's/(.*),$/http:\/\/x.y.z\/\1.mp3/'
http://x.y.z/3060000-3062005,50001027-50002018,907200-907202,20024011-20024012.mp3
Ce que cela fait :
grep -Po '\d+-\d+' data.txt
extrait toutes les séquencesNUMBER-NUMBER
de vos données, comme3060000-3062005
et affiche une séquence par ligne.tr '\n' ','
convertit tous les caractères de nouvelle ligne de son entrée en virgules, joignant ainsi les lignes entre elles.sed -r 's/(.*),$/http:\/\/x.y.z\/\1.mp3/'
supprime la virgule finale de son entrée et l'intègre dans la chaînehttp://x.y.z/\1.mp3
, en remplaçant\1
. Notez que tous les slashes dans la chaîne doivent être échappés avec un backslash.
Avec awk
:
... | awk -F'"' '{part=part substr($2,2) ","} \
END {sub(",$", "", part); print "http://x.y.z/" part ".mp3"}'
-
-F'"'
définit le séparateur de champ comme"
-
part=part substr($2,2) ","}
récupère le deuxième champ, etsubstr($2,2)
enlève lev
initial de la chaîne, et le résultat est sauvegardé en ajoutant une virgule à la fin comme variablepart
-
END {sub(",$", "", part); print "http://x.y.z/" part ".mp3"}
est exécuté après l'analyse de tous les enregistrements, ici nous enlevons la dernière virgule de la variablepart
, et affichons le format de sortie désiré
Exemple:
% cat file.txt
Tout d'abord, vous devrez comprendre comment obtenir le texte que vous devez afficher. Étant donné que d'autres réponses montrent comment faire cela, je n'aurai pas besoin d'inclure ces informations dans ma réponse.
Cependant, je vais expliquer comment exporter ces informations dans un fichier.
Pour ce faire, insérez > nom_de_fichier
après votre commande. Cela écrasera le contenu du fichier (le créant s'il n'existe pas) avec la sortie standard (stdout) de la commande utilisée.
Une méthode alternative consiste à utiliser >>>
au lieu de >
pour ajouter le texte à un fichier plutôt que de l'écraser.