"<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文件,然后打印现在的值,因为它可能有问题。
答案 0 :(得分:2)
除非您确定文本格式是这样修复的,否则我不会使用正则表达式相关工具。任何单个换行符都可能破坏sed / grep解决方案。
你需要的是xpath来解析xml并提取东西。在linux下,您可以尝试xmllint
:
xmllint --xpath '//violation/text()' file.xml
将输出:
System.out.print is used1
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
以下是输出: