
長い行がたくさんあるファイルがあります。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|$)'