xyz
1行に対応する文字列があり、それに続くすべての行を新しいファイルにコピーfile1.txt
したいと思います。この目標をどのように達成できますか?xyz
file1.txt
file2.txt
私はcat
コマンドを知っています。ところで、出発船をどのように指定しますか?
ベストアンサー1
GNU sedの使用
すべての行をコピー後ろに xyz
、努力する:
sed '0,/xyz/d' file1.txt >file2.txt
1,/xyz/
最初の行で始まり、最初の一致で終わる行の範囲を指定しますxyz
。 d
sedにこの行を削除するように指示してください。
メモ:BSD / MacOSでは、sedは機能しますsed '1,/xyz/d' file1.txt >file2.txt
が、最初の項目がxyz
2行目以上にある場合にのみ機能します。 (帽子のヒント:先行.)
提案された別のアプローチドンクリスティ、次に適用する必要があります。みんな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
)から正規表現に一致する最初の行まで、すべての行をスキップするように指示しますxyz
。 1
残りのすべての行を印刷するように awk に指示します。