我想使用bash工具来获取标签之间的内容,但前提是模式在两者之间匹配。
例如,如果我有这个文件:
<tag>
CAT
</tag>
...
<tag>
DOG
HORSE
</tag>
...
<tag>
DOG
CAT
</tag>
我希望输出为:
<tag>
CAT
</tag>
<tag>
DOG
CAT
</tag>
我可以使用sed来打印开始和结束标记cat file.txt | sed -n '/<tag/,/<\/tag/p'
的内容,但是如何过滤&#34;每个块&#34;根据他们是否有“&#34; CAT&#34;在至少一行?
答案 0 :(得分:1)
不确定是否可以sed
完成。但如果您愿意使用perl
(bash工具),可以继续使用此正则表达式。
(<tag>(?=(?:(?!<\/tag>).)*CAT)(?:(?!<\/tag>).)*<\/tag>)
抓住捕获。不要忘记添加标记s
和g
。请参阅演示。