Sed - 抓取中间有模式匹配的html标签

时间:2014-09-30 12:38:39

标签: regex bash sed

我想使用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;在至少一行?

1 个答案:

答案 0 :(得分:1)

不确定是否可以sed完成。但如果您愿意使用perl(bash工具),可以继续使用此正则表达式。

(<tag>(?=(?:(?!<\/tag>).)*CAT)(?:(?!<\/tag>).)*<\/tag>)

抓住捕获。不要忘记添加标记sg。请参阅演示。

http://regex101.com/r/aW3pR4/8