パターンの前にオンラインでファイルを2つの部分に分割する

パターンの前にオンラインでファイルを2つの部分に分割する

ほぼ同じ質問です。パターンに従ってファイルを2つの部分に分割file1ただし、この例では行をXYZに設定しないでくださいfile.txt

ABC
EFG
XYZ
HIJ
KNL

XYZを含めたいfile2(しかしXYZまだ分割モードです)。私が今持っているのは、次の答えを使うことです。https://unix.stackexchange.com/a/202516/108861次に、最後の行をfile1一番上に追加してfile2削除しますfile1。しかし、より簡単な単一行ソリューションはありますか?

答え1

修正はとても簡単です。私のソリューションもう一つの質問です。ただ削除してくださいnext

perl -ne 'if(/XYZ/){$a=1} ; $a==1 ? print STDERR : print STDOUT;' file >f1 2>f2;

これにより、を含むf1すべてとXYZ他のすべてが生成されます。f2XYZ


または、受け入れられた回答あなたがリンクした質問によると、すでにあなたの要件を満たしています。XYZ最初のファイルにのみ残ります。 2番目のコマンドで使用するには、2つのawkコマンドを逆にするだけです。

awk '/XYZ/{out="file2"}{print >out}; ' out=file1 file

答え2

その他の変形(バンドsed

sed '/XYZ/,${
             w file2
             d
            }' file >file1

関連情報