sed
-e
スイッチに関するドキュメントが見つかりません。単純な置換の場合、必要ですか?
例えば.
sed 's/foo/bar/'
VS
sed -e 's/foo/bar/'
Manページから:
-e script, --expression=script
add the script to the commands to be executed
したがって、複数の-e
多くの部分からスクリプトを構築するためのオプション。
$ sed -e "s/foo/bar/" -e "/FOO/d"
最初にfoo
をbar
に置き換え、次にFOO
を含むすべての行を削除します。
これはあなたのために働くかもしれません:
sed -e '/foo/i\' -e 'bar' -e '/fred/a\' -e 'barny' -e '/harry/c\' -e 'potter' file
いずれの場合も、i
(挿入)、a
(追加)およびc
(変更)コマンドは改行で終了する必要があります。
通常、コマンドは;
で区切ることができます。 /foo/d;/bar/d
および{...
}によってグループ化されます。 /foo/{h;d}
ですが、i,a,c
コマンドの場合、-e
はコマンドを分離する方法を提供します。
代わりに、Shell(bash)を使用して改行を挿入します。
sed '/foo/i\bar'$'\n''/fred/a\barney'$'\n''/harry/c\potter' file
-e
、 に相当 --expression
は、別の Answer に示されているように、いくつかの式を一緒に(一般的ではありません)ストリングする場合を除き、オプションです。
余談:;
を同じ式で代わりに使用して、複数の式を順番に実行できます。
sed
のヘルプでは、-e
フラグが次のことを表していることがわかります。
-e script, --expression=script
add the script to the commands to be executed
しかし、-e
に遭遇した後で混乱するのは、あなたが最初ではありません。あなたの例では、sed 's/foo/bar/'
とsed -e 's/foo/bar/'
は同等です。どちらの場合でも、s/foo/bar/
は、sedによって実行されるscriptです。 2番目のオプションはより明示的ですが、-e
が頻繁に使用されるのはそのためと思われます。その理由は、-e
により、sed
の同じ呼び出しで複数のスクリプトを使用できるようになるためです。それでも、スクリプトを1つだけ使用しているのになぜそれを使用するのかという疑問が残ります。次の例はそれを説明するかもしれません:
echo "foo" | sed -e 's/foo/bar/' -e 's/bar/foo'
「foo」を出力します。
しかしながら、
echo "foo" | sed 's/foo/bar/' -e 's/bar/foo'
sed
は最初のs/foo/bar
をファイル名として解釈するため、失敗します。したがって、将来の生活を楽にするために、今日から-e
フラグの使用を開始できます。そうすれば、-e <script>
を使用して、コマンドにスクリプトを追加することができます。
N.B.他の回答では、複数のスクリプトを使用する代わりに;
を使用することが提案されています。これは技術的に可能である場合もありますが、コードが非常に読みにくくなるため、お勧めできません。ここに例を示します: https://www.grymoire.com/Unix/Sed.html#uh-61