web-dev-qa-db-ja.com

sed -iオプションは何をしますか?

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

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

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

illegal option sed -i

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

この点で入力を感謝します。

25
Allzhere

これの適用用途は次のとおりです。次のファイルがあるとします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
48

-iオプションが指定され、sedファイルをその場で編集します。

   -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if extension supplied)

from sed(1)

http://www.gnu.org/software/sed/manual/sed.html#Introduction

7
falsetru

sedの一部の実装では、-iオプション。それが何をするかは、

sed -e '...' file > tmp
mv tmp file
4
choroba