sedコマンドの-eの目的は何ですか?


41

sed -eスイッチに関するドキュメントが見つかりません。簡単に交換するには、必要ですか?

例えば

sed 's/foo/bar/'

VS

sed -e 's/foo/bar/'

14
あなたはこれを見つけられなかったと確信していますman sedか?

4
ポトンの説明が見つからない、「cmd1; cmd2」を使用しない理由
ユーザー不明

回答:


28

manページから:

-e script, --expression=script

    add the script to the commands to be executed

したがって、複数の-eオプションを使用して、多くの部分からスクリプトを作成できます。

$ sed -e "s/foo/bar/" -e "/FOO/d"

最初に代わるfoobar、次に含むすべての行を削除しますFOO


3
したがって、スクリプトが1つしかない場合は「-e」は必要ありませんか?
JohnyTex

私も、の真の目的を探しています-e
typelogic

27

これはあなたのために働くかもしれません:

sed -e '/foo/i\' -e 'bar' -e '/fred/a\' -e 'barny' -e '/harry/c\' -e 'potter' file

いずれの場合も、i(挿入)、a(追加)、c(変更)コマンドは改行で終了する必要があります。

通常、コマンドは;eg で区切って} egで/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

1
少なくともいくつかのsed実装(たとえば、FreeBSD)では、-eセミコロンではなくnewlines /を使用してラベルとブランチコマンドを終了する必要もあります。これは動作しません:sed ':a; /x/ { s/x/y/g; ba }; q' <<< "jxm"。しかし、これは:sed -e ':a' -e '/x/ { s/x/y/g; ba' -e '}; q' <<< "jxm"
-dubiousjim

must be terminated with a newlineここでこのフレーズがどの程度必要かはわかりません。私がここでテストしたときcygwin、これは動作します:sed '/foo/i\bar' file。個別の式を1つに融合できるようになったので、これは元の質問に再び浮上します:の本当の目的は何-eですか?
typelogic

1

-e--expression別のAnswerに示されているように(一般的ではない)複数の式をつなぎ合わせている場合を除き、と同等はオプションです。

余談:;同じ式で代わりに使用して、複数の式を次々に実行できます。


0

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によって実行されるスクリプトです。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>

NB他の回答で;は、複数のスクリプトを使用する代わりに使用することが提案されています。場合によっては技術的には可能ですが、コードを読むのが非常に難しくなるため、推奨されません。こちらの例をご覧くださいhttps : //www.grymoire.com/Unix/Sed.html#uh-61

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