回答:
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。
別の選択肢はex、の前身viです。これは、実際にその場でスクリプトファイルを編集するための選択肢のPOSIXツール。それは、Perlよりも非常に柔軟であり、間違いなくさらに移植性があります。(Windowsの世界の外にいるなら、間違いなくPerlよりもポータブルです。)sed -i
ex少なくともを使用したサンプルコマンドのスタック交換には、少なくともsed、awkおよびPerl を使用した多数のサンプルコマンドと比較して、比較的不足しています。しかし、私自身はPOSIXの仕様をex徹底的に掘り下げており、それ以来ドラムを打ち負かしています。exこことvi / Vim stackexchangeの両方を使用して多くの回答を書きました。
参考文献:
複数の-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
aがに変換されb、次にのすべてのインスタンスbがに変換されdます。あなたが同じことを行うことができますsed -i -e 's/a\|b/d/g' fileいずれかのターンすべてのインスタンスaまたはbにd。