2014-09-30 74 views
0

我想使用bash工具來抓取標籤之間的內容,但前提是模式匹配中間的某處。Sed - 抓住模式匹配的html標籤

例如,如果我有這樣的文件:

<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'的內容,但我如何根據他們是否至少在一行上有「CAT」一詞來過濾「每個塊」?

回答

1

不知道這是否可以通過sed完成。但如果您願意使用perl(bash工具),您可以繼續使用此正則表達式。

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

只要抓住了captures.Do不忘加上標誌sg。看到演示。

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

+0

謝謝!我一直在學習perl這些天的意義.. – anthonybell 2014-09-30 13:43:49

+0

@anthonybell可以請你張貼你使用的最終答案.... – vks 2014-09-30 14:48:07