estou pedindo sua ajuda por favor.
Revisei muitas fontes e fiz alguns testes com awk e sed, mas não consigo fazer funcionar. Abaixo está um trecho de um arquivo de configuração que eu poderia obter uma saída via grep, mas não do jeito que preciso.
> file.txt
>
> "<property>name="DBName"><value>ABC</value>name="DBName"><value>DEF</value></property>
>
> cat file.xml | grep -o -P '.name="DBName"><value>.{0,20}'
> name="DBName"><value>ABC</value>
> name="DBName"><value>DEF</value></propert
A saída desejada é:
ABC
DEF
Obrigado por qualquer ajuda.
E eu
If (enorme, enorme "se") seu arquivo realmente tem apenas o caso muito simples em que você deseja a string exata
<value>
seguida por alguns não-<
caracteres e então</value>
, então seu problema pode ser formulado como "busque-me a string de caracteres simples, não -caracteres de nova linha encontrados entre cada ocorrência<value>
e a primeira<
depois dela", então você pode fazer (usando GNUgrep
):É claro que isso falhará em qualquer coisa, mesmo que ligeiramente diferente. Se você tiver valores multilinhas, por exemplo, ou se a tag de valor puder ter algo como
<value foo=bar>
ou em qualquer outro caso XML perfeitamente válido. A maneira certa© é usar um analisador XM:. Você pode querer verificarxmllint
ou XMLStarlet entre outros.Se toda a sua entrada for exatamente igual à linha de entrada de exemplo que você postou:
então usando qualquer awk:
mas, como qualquer outra solução que não utiliza um analisador XML, isso é frágil.
Muito obrigado, isso funcionou para mim. Aqui, para resumir mais código de exemplo e a solução final para mr:
Se você tiver uma entrada XML bem formada, como nós
Você pode usar uma ferramenta compatível com XML e usar Xpath (ou similar) para selecionar as partes a serem extraídas. Exemplo com xidel :