Egrep несколько строк в файле XML

У меня есть набор файлов XML в стандартном формате, который я бы хотел найти, чтобы увидеть, соответствуют ли они двум строкам.

Вот идея:

<ELEMENT1>Dave</ELEMENT> <DON'TCARE1>Blaa</DON'TCARE2> <DON'TCARE2>Blaa2</DON'TCARE2> <ELEMENT2>History</ELEMENT2> 

Как я могу сопоставить содержимое ELEMENT1 и ELEMENT2 с egrep и возвращать имя файла, которое их содержит?

С недавним GNU grep созданным с недавним PCRE:

 grep -Po '<(ELEMENT[12]>)\K.*?(?=</\1)' 

Следующий XQuery должен дать вам желаемый результат:

 for $x in (/content/element1,/content/element2) return $x/text() 

Например, с помощью интерпретатора XQuery, такого как XQilla и входной файл, например

 <?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

 truc truc2 

Для вашего примера регулярные выражения могут быть достаточными, но в общем случае это плохая идея использовать их для синтаксического анализа XML, потому что XML не является обычным языком (т.е. языком, который может быть использован с регулярными выражениями).