Bash grep extraire valeur entre balises

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 .
Configuration: Windows 7 Internet Explorer 7.0

5 réponses

  1. 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).
    1. 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>
      1. Modérateur
        TEST2=$(sed -n 's/\([^>]*>\)\([^<]*\)<.*/\2/p' <<<$TEST)
    2. Oups, j'ai oublié de preciser qu'il y avait plus balise <> dans le txt
      1. Modérateur
        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]$

        ;-))