sedを使用して構成ファイルを編集しようとしています。変更したい行がいくつかあります。 Linuxでは、内部編集が許可されていることを知っていますが、sed -i
バックアップファイルに保存する必要があります。ただし、バックアップファイルが複数あることを避け、すべての変更を一度に適用したいと思います。
これを行う方法はありますか、sed -i
それともより良いオプションがありますか?
答え1
繰り返し(またはスクリプトがファイルにある場合)、複数の操作を実行できます sed
。-e
-f
sed -i -e 's/a/b/g' -e 's/b/d/g' file
in-placeという単一のファイルで両方を変更しますfile
。バックアップファイルがありません。
sed -ibak -e 's/a/b/g' -e 's/b/d/g' file
in-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 -i
Perlよりも移植性がはるかに優れています。 (Windowsの世界から離れている場合、確かにPerlよりも移植性に優れています。 )
ex
少なくとも、およびPerlを多用するのと比較して、sed
このStack Exchangeで使用されるサンプルコマンドは比較的不足していますawk
。しかし、私は自分自身を探検した。POSIX仕様ex
私はそれ以来それを応援してきました。私はex
ここでvi / Vimスタック交換に多くの答えを書きました:
- パターンマッチング後、上5行、下4行削除
- ファイルから特定のパターンまたは文字列の後のすべての項目を削除するには?
- ファイル内のすべての行をgrepし、パターンマッチングポイントからファイルに行を書き込みます。
- OS Xのフォルダ内のすべての.phpファイルの文字を置き換える方法は?
- ファイルの終わりがまだ存在しない場合にのみ、ファイルの末尾にいくつかの行を追加する方法は?
追加資料: