
我有一個包含一堆長行的文件。我想抓取兩個模式之間的每一組並將它們列印到一個新文件中,每行一個匹配。我可以設法使用 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|$)'