ファイルの残りの行を別のファイルにコピーする方法

ファイルの残りの行を別のファイルにコピーする方法

xyz1行に対応する文字列があり、それに続くすべての行を新しいファイルにコピーfile1.txtしたいと思います。この目標をどのように達成できますか?xyzfile1.txtfile2.txt

私はcatコマンドを知っています。ところで、出発船をどのように指定しますか?

答え1

GNU sedの使用

すべての行をコピー後ろに xyz、努力する:

sed '0,/xyz/d' file1.txt >file2.txt

1,/xyz/最初の行で始まり、最初の一致で終わる行の範囲を指定しますxyzdsedにこの行を削除するように指示してください。

メモ:BSD / MacOSでは、sedは機能しますsed '1,/xyz/d' file1.txt >file2.txtが、最初の項目がxyz2行目以上にある場合にのみ機能します。 (帽子のヒント:先行.)

提案された別のアプローチドンクリスティ、次に適用する必要があります。みんなsed:

{ printf %s\\n; cat file1.txt; } | sed '1,/xyz/d' >file2.txt

はい

次のテストファイルを検討してください。

$ cat file1.txt
a
b
xyz
c
d

次のコマンドを実行してください。

$ sed '1,/xyz/d' file1.txt >file2.txt
$ cat file2.txt
c
d

awkを使う

awkにも同じロジックを使用できます。

awk 'NR==1,/xyz/{next} 1' file1.txt >file2.txt

NR==1,/xyz/{next}awkに、最初の(NR==1)から正規表現に一致する最初の行まで、すべての行をスキップするように指示しますxyz1残りのすべての行を印刷するように awk に指示します。

答え2

そしてed

ed -s file.txt <<< $'/xyz/+1,$w file2.txt'

edこれは、有線から次に(リモート)コマンドを送信します。後ろに()には+1ファイル()の終わりまでの行が記録されています。xyz$wfile2.txt

答え3

そしてcsplit:

csplit -s file1.txt %xyz%1

答え4

$ sed -n '/xyz/,$p' file.txt > file2.txt

すべての行が印刷されるのを-n防ぎます。sedwith は$ファイルの終わりを示し、end はp印刷行を示します。つまり/xyz/$p、行が一致するとxyzファイルの最後まで印刷します。

関連情報