5 votes

Extraire du texte du fichier et envoyer la ligne dans un fichier

Après avoir utilisé grep sur un fichier html, j'obtiens la sortie suivante:

6voto

Todd Gamblin Points 101

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"

5voto

Byte Commander Points 99026

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équences NUMBER-NUMBER de vos données, comme 3060000-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îne http://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.

4voto

heemayl Points 85741

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, et substr($2,2) enlève le v initial de la chaîne, et le résultat est sauvegardé en ajoutant une virgule à la fin comme variable part

  • 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 variable part, et affichons le format de sortie désiré

Exemple:

% cat file.txt

0voto

Dev Points 520

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.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X