取得兩個模式之間的所有正規表示式匹配並將它們列印到文件

取得兩個模式之間的所有正規表示式匹配並將它們列印到文件

我有一個包含一堆長行的文件。我想抓取兩個模式之間的每一組並將它們列印到一個新文件中,每行一個匹配。我可以設法使用 Python 來完成此任務,但我更喜歡僅使用命令列工具來完成此任務。如果沒有結束模式,我想抓住一切,直到行尾。

就像是:

input: 
xxSTART relevanttext xxEND something else xxSTART even more relevant

output:
relevanttext
even more relevant

答案1

如果 GNU grep 是一個選項,您可以傳遞-P(perl 相容的正規表示式)標誌並使用前向斷言、後向斷言和非貪婪匹配來提取您需要的內容

echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant'  |\
grep -oP '(?<=START).*?(?=xxEND|$)'
relevanttext
even more relevant

或者正如 Stephane Chazelas 所建議的那樣,使用俏皮的\K代替後視斷言

echo 'xxSTART relevanttext xxEND something else xxSTART even more relevant'  |\
grep -oP 'START\K.*?(?=xxEND|$)' 

相關內容