ほぼ同じ質問です。パターンに従ってファイルを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
他のすべてが生成されます。f2
XYZ
または、受け入れられた回答あなたがリンクした質問によると、すでにあなたの要件を満たしています。XYZ
最初のファイルにのみ残ります。 2番目のコマンドで使用するには、2つのawk
コマンドを逆にするだけです。
awk '/XYZ/{out="file2"}{print >out}; ' out=file1 file
答え2
その他の変形(バンドsed
)
sed '/XYZ/,${
w file2
d
}' file >file1