搜索模式Y后提取与模式X匹配的文本(bash)
在bash脚本中,如何从以abc开头、以/abc结尾的XML文件中提取文本,该文件位于我需要查找的模式之后? 输入文件的示例:搜索模式Y后提取与模式X匹配的文本(bash),bash,awk,sed,grep,Bash,Awk,Sed,Grep,在bash脚本中,如何从以abc开头、以/abc结尾的XML文件中提取文本,该文件位于我需要查找的模式之后? 输入文件的示例: <111> <abc> text </abc> <def> text </def> </111> <222> <abc> text to extract </abc> </222> 文本 文本 要提取的文本 我的目标是显示“要提取的文本”,表明我
<111>
<abc>
text
</abc>
<def>
text
</def>
</111>
<222>
<abc>
text to extract
</abc>
</222>
文本
文本
要提取的文本
我的目标是显示“要提取的文本”,表明我正在寻找模式
不是有效的xml标记名t111
,t222
,并且您有一个根元素
xmllint --xpath "//t222/abc/text()" your.xml
这真的很难看,你真的应该用@Kent的答案,但如果你真的,真的坚持:
grep -A 999 "<222>" file.xml | grep -A1 "<abc>" | tail -n 1
grep-a999”file.xml | grep-A1 | tail-n1
在找到您的模式后,它最多需要999行,然后,从中,它获取
后面的一行,并从中获取最后一行。使用GNU awk进行多字符RS和gensub()
$awk-vrs='^$'{print gensub(/.*.*.\n(.*)\n.*/,“\\1”,”“)}文件
要提取的文本
如果是有效的XML文件,请使用XML解析器,如xmlint或xmlstarlet。@约翰:如果您不知道t222后面的标记,并且希望去掉换行符:xmllint--xpath//t222/*/text()“your.XML|grep.
$ awk -v RS='^$' '{print gensub(/.*<222>.*<abc>\n(.*)\n<\/abc>.*/,"\\1","")}' file
text to extract