56

シェルスクリプトをデバッグしていて、次のコマンドで実行されるタスクを見つけようとしています:

sed -i '1,+999d' /home/org_user/data.txt

次のエラーで失敗するため、このコマンドを変更する必要があります。

illegal option sed -i

しかし、変更する前に、BAU の機能を理解する必要があります。

この点に関するご意見をお待ちしております。

4

3 に答える 3

100

これの適用可能な用途は次のとおりです。次のファイルがあるとしますfile.txt

1, 2, 6, 7, "p" 

「p」を 0 に置き換えます。

sed 's/"p"/0/g' file.txt

上記を使用すると、出力がコマンドラインに出力されます。

次のように、そのテキストをファイルにリダイレクトしない理由を考えるでしょう。

sed 's/"p"/0/g' file.txt > file.txt

残念ながら、リダイレクトの性質上、上記は空のファイルを生成するだけです。

代わりに、出力用に一時ファイルを作成する必要があり、後で元のファイルを次のように上書きします。

sed 's/"p"/0/g' file.txt > tmp.txt && mv tmp.txt file.txt

上記の sed edit in place オプションでの長い回避策を -i で実行する代わりに、はるかに簡単なコマンドを使用できます。

sed -i 's/"p"/0/g' file.txt
于 2017-03-06T16:17:49.727 に答える
7

の一部の実装では、このオプションsedがサポートされていません。-iそれが何をするかは、次のようにシミュレートできます

sed -e '...' file > tmp
mv tmp file
于 2013-08-30T07:38:19.310 に答える