在bash脚本中,我如何能够从以abc结尾的XML文件中提取文本以/ abc结尾,这是在我需要查找的模式之后? 输入文件的例子:
<111>
<abc>
text
</abc>
<def>
text
</def>
</111>
<222>
<abc>
text to extract
</abc>
</222>
我的目标是显示&#34;文本以提取&#34;表示我正在寻找模式&lt; 222&gt;。
答案 0 :(得分:1)
<111> <222>
不是有效的xml标记名称假设111,222标记名为t111
,t222
并且您有一个根元素。
xmllint --xpath "//t222/abc/text()" your.xml
答案 1 :(得分:0)
这真的太丑了,你真的应该使用@ Kent的答案,但如果你真的,真的坚持:
grep -A 999 "<222>" file.xml | grep -A1 "<abc>" | tail -n 1
找到您的模式<222>
后最多需要999行,然后,从那里开始,它需要<abc>
之后的单行,并且从最后一行开始。
答案 2 :(得分:0)
将GNU awk用于多字符RS和gensub():
$ awk -v RS='^$' '{print gensub(/.*<222>.*<abc>\n(.*)\n<\/abc>.*/,"\\1","")}' file
text to extract