web-dev-qa-db-ja.com

インプレース引数の複数の式でsed

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が必要になり、作業を試みました。

25
JigarGandhi

システムの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
26
PM 2Ring

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
10
Ian McGowan

複数の-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 ''を使用する必要があるため、バックアップファイルに拡張子を付ける必要があります。ファイル)。

5
cuonglm

VimはExモードで使用できます。

ex -sc '%s/Some/any/|%s/item/stuff/|x' file
  1. %すべての行を選択

  2. s代替

  3. x保存して閉じる

1
Steven Penny