jon*_*rry 10 xml unix perl awk grep
我正在搜索具有某些属性的xml文件.例如,包含以下模式的文件:
<param-value>
<name>Hosts</name>
<description>some description</description>
<value></value>
</param-value>
Run Code Online (Sandbox Code Playgroud)
对于这样的文件,我想解析另一个标记的值,例如:
<param-value>
<name>Roles</name>
<description>some description</description>
<value>asdf</value>
</param-value>
Run Code Online (Sandbox Code Playgroud)
并打印出文件名和"asdf".从命令行完成此操作的最简单方法是什么?
我想到的一种方法是使用带有-l选项的grep来过滤匹配的文件,然后使用xargs grep来提取Roles的值.但是,grep不适用于多行正则表达式.我看到另一个问题表明它可以用-Pzo选项完成,但是没有任何运气让它在我的情况下工作.有更简单的方法吗?
Mar*_*nor 13
以下linux命令使用XPath访问XML文件中的指定值
for xml in `find . -name "*.xml"`
do
echo $xml `xmllint --xpath "/param-value/value/text()" $xml`| awk 'NF>1'
done
Run Code Online (Sandbox Code Playgroud)
匹配XML文件的示例输出:
./test1.xml asdf
./test4.xml 1234
Run Code Online (Sandbox Code Playgroud)
我通常使用 Perl 的XML::XSH2。您可以在其中交互地处理 XML 文件,或者编写脚本。该脚本类似于(未经测试):
for my $file in { glob "*.xml" } {
open $file ;
my $param_value = //param-value[name="Hosts"] ;
if $param_value echo $file $value/value ;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20162 次 |
最近记录: |