Grep命令用于打印XML标记的值

时间:2015-01-05 16:15:59

标签: xml linux grep

"<violation beginline="13" endline="13" begincolumn="19" endcolumn="36" rule="SystemPrintln" ruleset="Java Logging" package="com.test" class="Two" method="violation1Fix" externalInfoUrl="http://pmd.sourceforge.net/pmd-5.1.0/rules/java/logging-java.html#SystemPrintln" priority="2"> System.out.print is used1 </violation>

我有一个像上面这样的XML文件 -

我想打印“违规”标签的值和每个标签的起始行号。如何使用grep或其他linux命令来完成?

我不想加载XML文件,然后打印现在的值,因为它可能有问题。

2 个答案:

答案 0 :(得分:2)

除非您确定文本格式是这样修复的,否则我不会使用正则表达式相关工具。任何单个换行符都可能破坏sed / grep解决方案。

你需要的是xpath来解析xml并提取东西。在linux下,您可以尝试xmllint

xmllint --xpath '//violation/text()' file.xml

将输出:

System.out.print is used1

更新,添加xpath以获取属性:

xmllint --xpath 'number(//violation/@beginline)' file.xml

输出:

13

如果您想要具有属性名称的值:

xmllint --xpath '//violation/@beginline' file.xml

输出:

beginline="13"

答案 1 :(得分:0)

使用grep

grep -oP '(?<=>).*?(?=</violation>)' input.xml && grep -oP '(beginline=").*?(")' input.xml

以下是输出

enter image description here