を使用すると、タグを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 - >パターンと次の行を印刷します。