Bash grep extraire valeur entre balises
GreG
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je cherche à extraire une valeur dans un .txt .
Cette valeur X est situé entre 2 balises du type : <TOTO>X<TOTO> .
Malheuresement avec un cat + grep je n'arrive pas à sortir cette valeur X .
Si quelqu'un a une idée .
Je cherche à extraire une valeur dans un .txt .
Cette valeur X est situé entre 2 balises du type : <TOTO>X<TOTO> .
Malheuresement avec un cat + grep je n'arrive pas à sortir cette valeur X .
Si quelqu'un a une idée .
Configuration: Windows 7 Internet Explorer 7.0
5 réponses
-
Salut,
Avec "grep" tu ne pourras pas extraire directement que le contenu entre > et <.
[tmpfs]$ cat plop Bonjour, Je cherche à extraire une valeur dans un .txt . Cette valeur X est situé entre 2 balises du type : <TOTO>X<TOTO> . Malheuresement avec un cat + grep je n'arrive pas à sortir cette valeur X . Si quelqu'un a une idée [tmpfs]$ grep -o '>.*<' plop >X< [tmpfs]$ sed -n 's/\([^>]*>\)\([^<]*\)<.*/\2/p' plop X [tmpfs]$
;-))
-
-
Exemple AVANT => APRÈS merci.
-
Mon script est celui ci :
TEST=$(grep -o '<TOTO>.*</TOTO>' /home/greg/scripts/test.txt) TEST2=$(sed -n 's/\([^>]*>\)\([^<]*\)<.*/\2/p' $TEST) echo $TEST echo $TEST2
Quand je le lance j'ai l'erreur :
sed: impossible de lire <TOTO>101</TOTO>: Aucun fichier ou répertoire de ce type
<TOTO>101</TOTO> -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
en une seule passe :
TEST=$(sed -n '/<TOTO>.*<\/TOTO>/s/[^>]*>\([^<]*\)<.*/\1/p' /home/greg/scripts/test.txt)
`grep` n'est pas utile, car `sed` se charge de ne traiter que la ligne comportant <TOTO>.*</TOTO>, et d'afficher uniquement le résultat de la substitution(/sélection).