sed -i #expression1 #expression2
を使用して、ファイル内の複数の単語を置き換えようとしています
Something 123 item1
Something 456 item2
Something 768 item3
Something 353 item4
anything 123 stuff1
anything 456 stuff2
anything 768 stuff3
anything 353 stuff4
sed -i
を2回使用すると、次の出力を取得できます。
sed -i 's/Some/any/g' file
sed -i 's/item/stuff/g' file
これを単一のインプレースコマンドとして作成する方法はありますか?
sed -i 's/Some/any/g' -i 's/item/stuff/g' file
上記のコードを試したところ、ファイルとしてs/item/stuff/g
が必要になり、作業を試みました。
システムのsed
のバージョンによっては、実行できる場合があります
sed -i 's/Some/any/; s/item/stuff/' file
ここでは、g
コマンドの最後のスラッシュの後にs
は必要ありません。これは、1行につき1つの置換しか行わないためです。
または:
sed -i -e 's/Some/any/' -e 's/item/stuff/' file
-i
オプションは、sed
にファイルを編集するように指示します。 -i
の直後に文字がある場合、sed
は元のファイルのバックアップを作成し、それらの文字をバックアップファイルの拡張子として使用します。例えば、
sed -i.bak 's/Some/any/; s/item/stuff/' file
または
sed -i'.bak' 's/Some/any/; s/item/stuff/' file
file
を変更し、元のファイルをfile.bak
に保存します。
もちろん、Unix(またはUnixライク)システムでは、通常「.bak」ではなく「〜」を使用するので、
sed -i~ 's/Some/any/;s/item/stuff/' file
Sed式を「;」でつなぐことができます。
%sed -i 's/Some/any/g;s/item/stuff/g' file1
%cat file1
anything 123 stuff1
anything 456 stuff2
anything 768 stuff3
anything 353 stuff4
複数の-e
オプションを使用した複数の式:
sed -i.bk -e 's/Some/any/g' -e 's/item/stuff/g' file
または、1つだけ使用できます。
sed -i.bk -e 's/Some/any/g;s/item/stuff/g' file
OSX sed のようなsed
の実装が空の拡張子で機能しない場合、元のファイルを上書きするにはsed -i ''
を使用する必要があるため、バックアップファイルに拡張子を付ける必要があります。ファイル)。
VimはExモードで使用できます。
ex -sc '%s/Some/any/|%s/item/stuff/|x' file
%
すべての行を選択
s
代替
x
保存して閉じる