Com o recente% GNUgrep
construído com PCRE recente:
grep -Po '<(ELEMENT[12]>)\K.*?(?=</)'
Eu tenho uma coleção de arquivos XML em um formato padrão que gostaria de pesquisar para ver se eles correspondem a duas strings.
Aqui está a ideia:
<ELEMENT1>Dave</ELEMENT>
<DON'TCARE1>Blaa</DON'TCARE2>
<DON'TCARE2>Blaa2</DON'TCARE2>
<ELEMENT2>History</ELEMENT2>
Como posso combinar o conteúdo de ELEMENT1 e ELEMENT2 com egrep e retornar o nome do arquivo que os contém?
O XQuery a seguir deve fornecer a saída desejada:
for $x in (/content/element1,/content/element2)
return $x/text()
Por exemplo, com um interpretador XQuery como XQilla e um arquivo de entrada como
<?xml version="1.0" ?>
<content>
<element1>truc</element1>
<dontcare>blah</dontcare>
<dontcare>blah</dontcare>
<element2>truc2</element2>
<dontcare>blah</dontcare>
<dontcare>blah</dontcare>
</content>
xqilla -i 1.xml 1.query
de saídas
truc
truc2
Para o seu exemplo, regexps podem ser suficientes, mas no caso geral, é uma má idéia usá-los para análise XML porque o XML não é um idioma regular (ou seja, um idioma analisável com expressões regulares).