通过使用,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 -> 打印图案和下一行。