Искать только те строки с "...", следующая строка которых содержит определенный тег и значение

Используя grep, я хочу получить только те строки из всех xml файлов, которые содержат теги true, и следующей строкой после них должна быть community.

Пример 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

Как я могу добиться этого при поиске в командной строке?

0
18.11.2016, 22:30
2 ответа

Предполагается, что все файлы 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, он не зависит от порядка тегов в узле .

2
28.01.2020, 04:49
grep -A1 "<active>" *.xml

A1 -> распечатать шаблон и следующую строку.

-1
28.01.2020, 04:49

Теги

Похожие вопросы