sedの1回の呼び出しで複数の編集を行う


14

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

それを行う方法sed -iはありますか、またはより良い代替手段がありますか?

回答:


20

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

sed -i -e 's/a/b/g' -e 's/b/d/g' fileは、という名前の単一ファイルで両方の変更をそのfile場で行います。バックアップファイルなし。

sed -ibak -e 's/a/b/g' -e 's/b/d/g' fileは、という名前の単一ファイルで両方の変更をそのfile場で行います。という単一のバックアップファイルを使用しますfilebak


2
順序が重要であることに注意してください。上記のコマンド例では、文字のすべてのインスタンスaがに変換されb次にのすべてのインスタンスbがに変換されdます。あなたが同じことを行うことができますsed -i -e 's/a\|b/d/g' fileいずれかのターンすべてのインスタンスaまたはbd
ワイルドカード

4

別の選択肢はex、の前身viです。これは、実際にその場でスクリプトファイルを編集するための選択肢のPOSIXツール。それは、Perlよりも非常に柔軟であり、間違いなくさらに移植性があります。(Windowsの世界の外にいるなら、間違いなくPerlよりもポータブルです。)sed -i

ex少なくともを使用したサンプルコマンドのスタック交換には、少なくともsedawkおよびPerl を使用した多数のサンプルコマンドと比較して、比較的不足しています。しかし、私自身はPOSIXの仕様をex徹底的に掘り下げており、それ以来ドラムを打ち負かしています。exこことvi / Vim stackexchangeの両方を使用して多くの回答を書きました。

参考文献:


3

複数の-eオプションを使用するだけでなく、改行またはセミコロンを使用して、単一のsedスクリプトでsedコマンドを分離することもできます。

これは、そのスクリプトがコマンドラインの1行であっても、スクリプトファイルであっても同じです。

例えば

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

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

または:

sed -e 's/a/b/g
        s/b/d/g' file
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.