「ある行だけGrepしてください。...「次の行には、特定のラベルと値が含まれています。

「ある行だけGrepしてください。...「次の行には、特定のラベルと値が含まれています。

を使用すると、タグをgrep含むすべてのxmlファイルの行とそれに続く次の行だけが必要です。<active>true</active><codePool>community</codePool>

サンプル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

コマンドライン検索でこれをどのように達成できますか?

答え1

すべてのXMLファイルが現在のディレクトリにあり、パターンと一致すると仮定します*.xmlファイル名指定されたXMLを含めるファイル:

$ xml sel -t -i '/config/modules/Company_Module[active = "true" and codePool = "community"]' -f -nl ./*.xml

これは以下を使用します。XMLスターxmlただし、次のようにインストールされますxmlstarlet)これはコマンドラインXML解析ツールです。

指定されたXPath式と一致しようとし、一致する場合は、一致するXMLを含む入力ファイルのファイル名を出力します。

XMLパーサーを使用しているため、ノード内のタグの順序とは無関係です<Company_Module>

答え2

grepまあ、長い間使ってきた命令を残したくないですね。

だから私は次の方法を見つけました。

grep -rzl '<active>true</active>.*<codePool>community</codePool>' --include='*.xml' --color=always

これは私にとってうまくいきます。

答え3

grep -A1 "<active>" *.xml

A1 - >パターンと次の行を印刷します。

関連情報