2つのパターン間のすべての正規表現の一致を取得し、ファイルに出力します。

2つのパターン間のすべての正規表現の一致を取得し、ファイルに出力します。

長い行がたくさんあるファイルがあります。2 つのパターンの間にあるすべてのグループを取得して、1 行に 1 つの一致として新しいファイルに出力したいと思います。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

あるいはステファン・シャゼラスが提案するように、\K後読みアサーションの代わりに

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

関連情報