sedへの1回の呼び出しで複数回編集

sedへの1回の呼び出しで複数回編集

sedを使用して構成ファイルを編集しようとしています。変更したい行がいくつかあります。 Linuxでは、内部編集が許可されていることを知っていますが、sed -iバックアップファイルに保存する必要があります。ただし、バックアップファイルが複数あることを避け、すべての変更を一度に適用したいと思います。

これを行う方法はありますか、sed -iそれともより良いオプションがありますか?

答え1

繰り返し(またはスクリプトがファイルにある場合)、複数の操作を実行できます sed-e-f

sed -i -e 's/a/b/g' -e 's/b/d/g' filein-placeという単一のファイルで両方を変更しますfile。バックアップファイルがありません。

sed -ibak -e 's/a/b/g' -e 's/b/d/g' filein-placeという単一のファイルで両方を変更しますfile。という名前を使用してくださいfilebak

答え2

複数のオプションを使用することに加えて、改行または-eセミコロンを使用して単一のsedスクリプト内でsedコマンドを区切ることができます。

これは、スクリプトがコマンドラインの単一行でもスクリプトファイルでも同じです。

例えば

sed -e 's/a/b/g ; s/b/d/g' file

周囲の空白文字は;オプションです。ここではセミコロンが目立つように使用しています。通常、コマンド間のスペースは、コマンドを区切る改行文字を除いて無視されます。ただし、コマンド内のスペースは重要であり、しばしば重要であることを忘れないでください。

または:

sed -e 's/a/b/g
        s/b/d/g' file

答え3

もう1つのオプションは、以前は.itexとして知られているオプションです。実際にはviこれ内部スクリプトファイルを編集するために好ましいPOSIXツールです。 Perlより柔軟で、sed -iPerlよりも移植性がはるかに優れています。 (Windowsの世界から離れている場合、確かにPerlよりも移植性に優れています。 )

ex少なくとも、およびPerlを多用するのと比較して、sedこのStack Exchangeで使用されるサンプルコマンドは比較的不足していますawk。しかし、私は自分自身を探検した。POSIX仕様ex私はそれ以来それを応援してきました。私はexここでvi / Vimスタック交換に多くの答えを書きました:

追加資料:

関連情報