
以下を使用してファイル内の複数の単語を置き換えようとしています。
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
ファイルをインポートして処理しようとします。
答え1
システムのバージョンに応じて、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
または:
sed -i '
s/Some/any/
s/item/stuff/' file
この-i
オプション(GNU拡張は他のいくつかの実装でサポートされていますが、一部は-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
答え2
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
答え3
複数のオプションを使用する複数の式-e
:
sed -i.bk -e 's/Some/any/g' -e 's/item/stuff/g' file
または、次のいずれかを使用することもできます。
sed -i.bk -e 's/Some/any/g;s/item/stuff/g' file
sed
次の一部の実装では、バックアップファイルに拡張子を提供する必要があります。OSX sedsed -i ''
空の拡張子は機能しません(元のファイルを上書きするには拡張子を使用する必要があります)。
答え4
ExモードでVimを使用できます。
ex -sc '%s/Some/any/|%s/item/stuff/|x' file
%
すべての行を選択s
変えるx
保存して閉じる