Bash grep extraire valeur entre balises

GreG -  
 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 .
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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]$

;-))
0
GreG
 
Oups, j'ai oublié de preciser qu'il y avait plus balise <> dans le txt
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Exemple AVANT => APRÈS merci.
0
GreG
 
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>
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
TEST2=$(sed -n 's/\([^>]*>\)\([^<]*\)<.*/\2/p' <<<$TEST)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
 
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).
0