非常に単純な質問(と思います)
でファイルを編集することを学んでいますawk
ファイルからすべてのライナーを検索し、アセテートという単語を含むすべての行を削除したい
私が試してみました
awk 'match($0,"acetate") == 0 {print $0}' filename.txt > filename.txt
ただし、これは空の txt ファイルを返します。
なにか提案を?
非常に単純な質問(と思います)
でファイルを編集することを学んでいますawk
ファイルからすべてのライナーを検索し、アセテートという単語を含むすべての行を削除したい
私が試してみました
awk 'match($0,"acetate") == 0 {print $0}' filename.txt > filename.txt
ただし、これは空の txt ファイルを返します。
なにか提案を?
これをやってみてください:
awk '!/acetate/{print}' filename.txt > new_filename.txt &&
mv new_filename.txt filename.txt
または単に:
awk '!/acetate/' filename.txt > new_filename.txt &&
mv new_filename.txt filename.txt
を使用して、ファイルの印刷と変更を同時に行うことはできませんawk
。同じコマンドで実行したい場合は、sedを使用してみてください:
sed -i '/acetate/d' filename.txt
または Mac Os X の場合:
sed -i.'' '/acetate/d' filename.txt
UNIX を使用しているようです。これを行う場合:
command file > file
ここで、「コマンド」は任意の UNIX コマンドです。「コマンド ファイル」によって読み取られる前に、「ファイル」が「> ファイル」によって上書きされる危険性があるため、絶対に行わないでください。
「sed」などの一部のツールには、「インプレース」編集を可能にするオプションがあり、入力ファイルでそのコマンドを実行した結果がそのファイルに書き戻されます。それらのほとんどは、舞台裏で一時ファイルを使用しています。
コマンドの結果をファイルに書き戻す安全でポータブルな方法は、出力を tmp ファイルにリダイレクトしてから、一時ファイルを元のファイルに移動することです。
command file > tmp && mv tmp file
安全で、シンプルで、どんなコマンドでも機能します。
特定の単語を含まないファイル内の行を探すという特定のケースでは、おそらく必要なコマンドは「grep」であり、次のように使用します。
grep -v acetate filename.txt > tmp && mv tmp filename.txt
より複雑なものについては、おそらく awk が必要になるでしょう。
sputnick は比較的完全な回答を提供しています。grep の方法を追加します。
grep -v 'acetate' file > newfile
perl -pi -e 'if(/acetate/){undef $_}' your_file
これにより、インプレース置換が行われます。つまり、ファイル内の文字列 'acetate' を含む行が自動的に削除されます。または、次のこともできます。
perl -pi -e 'undef $_ if /acetate/' your_file
また
sed -i.bak '/acetate/d' temp