![取得兩個模式之間的所有正規表示式匹配並將它們列印到文件](https://rvso.com/image/50567/%E5%8F%96%E5%BE%97%E5%85%A9%E5%80%8B%E6%A8%A1%E5%BC%8F%E4%B9%8B%E9%96%93%E7%9A%84%E6%89%80%E6%9C%89%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA%E5%BC%8F%E5%8C%B9%E9%85%8D%E4%B8%A6%E5%B0%87%E5%AE%83%E5%80%91%E5%88%97%E5%8D%B0%E5%88%B0%E6%96%87%E4%BB%B6.png)
我有一個包含一堆長行的文件。我想抓取兩個模式之間的每一組並將它們列印到一個新文件中,每行一個匹配。我可以設法使用 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|$)'