Eu preciso encontrar um valor no arquivo entre STRING

0

Eu tenho um arquivo: exemplo aqui:

    <hello>TestFile</hello>
    <test>2018-04-30</test>
    <greetings>mycomputer</greetings>
    **<Iwanthis>6.1.0</Iwanthis>**
    <example>20180411</example>
    blah blah

Eu estou olhando para grep o valor (neste caso 6.1.0) entre 6.1.0

existe uma maneira de fazer o arquivo pegar o valor XXXX?

    
por Mike Smith 02.05.2018 / 14:24

2 respostas

2

Se você puder confiar que haverá uma tag de abertura e uma tag de fechamento nessa linha, você pode usar isso como separador de campo para awk :

awk -F "</*Iwanthis>" '(NF > 1){print $2}' yourfile

Isso falhará em muitos casos artificiais. Para ser mais rigoroso, você pode usar sed :

sed -n 's_.*<Iwanthis>\(.*\)</Iwanthis>.*__p' yourfile

O -n suprime a saída padrão, portanto, você apenas obtém a saída na linha correspondente. Eu escolhi o sublinhado como delimitador para o comando s para evitar a fuga da barra. O comando s substituirá a linha inteira pela parte entre a tag de abertura e fechamento (o refere-se à \(.*\) part) É claro que você ainda pode criar casos estranhos para fazer isso falhar.

    
por 02.05.2018 / 14:51
2

Parece um arquivo XML. Adicione uma anotação raiz e use um analisador XML:

$ { echo '<r>'; cat file; echo '</r>'; } | xmlstarlet sel -t -v //Iwanthis
6.1.0
    
por 02.05.2018 / 15:41