Используя grep
, я хочу получить только те строки из всех xml файлов, которые содержат теги
, и следующей строкой после них должна быть
.
Пример XML файла выглядит следующим образом:
<?xml version="1.0"?>
<config>
<modules>
<Company_Module>
<active>true</active>
<codePool>core</codePool>
<depends>
<Company_Module2 />
</depends>
</Company_Module>
</modules>
</config>
Но в папке много подобных файлов, структура XML одинакова.
Моя текущая команда grep
:
grep -rl '<active>true</active>' --include='*.xml' --color=always
Как я могу добиться этого при поиске в командной строке?
Предполагается, что все файлы XML находятся в текущем каталоге и соответствуют шаблону *. Xml
, и что это имена файлов из файлов, содержащих указанный XML:
$ xml sel -t -i '/config/modules/Company_Module[active = "true" and codePool = "community"]' -f -nl ./*.xml
Здесь используется XMLStarlet ( xml
, но иногда устанавливается как xmlstarlet
), который является инструмент для синтаксического анализа XML из командной строки.
Он пытается сопоставить указанное выражение XPath и, если оно совпадает, выводит имя файла входного файла, содержащего соответствующий XML.
Поскольку он использует синтаксический анализатор XML, он не зависит от порядка тегов в узле
.
grep -A1 "<active>" *.xml
A1 -> распечатать шаблон и следующую строку.