sedにはいつ「-e」が必要ですか?

sedにはいつ「-e」が必要ですか?

私が読んでいるhttps://stackoverflow.com/a/10010364/156458-esedオプションに関する質問があります。

私が正しい場合は、-eインラインsedコマンドの前に使用されます。ただし、.sedなしでインラインsedコマンドを指定できます-e。たとえば、次の2つが私と同じように機能します。

$ echo foo | sed  's/foo/bar/g'
bar

$ echo foo | sed -e 's/foo/bar/g'
bar

-fsedスクリプトを指定する必要はありません。いつそれが必要ですか-e?最初に提供されたリンクの特定の場合になぜ必要なのですか-e

ありがとうございます。

答え1

man sedこれは sed() のマニュアルページに返信されています。

-e script--expression=script実行するコマンドにスクリプトを追加します。

そして

no -e--expression[...]オプションが指定されている場合、オプションではなく最初の引数がsed解釈されるスクリプトとして使用されます。残りのすべての引数は入力ファイルの名前です。入力ファイルが指定されていない場合は、標準入力を読み込みます。

したがって、パラメータが1つしかない場合はスクリプトsedとして処理されます。sed複数のパラメータがある場合、または-eを使用して、どのパラメータがスクリプトであるかを確認--expressionする必要があります。sed

特定の例では、2つの選択肢は同義語です。

答え2

複数の式をコードに渡す場合は、通常-e(with)を使用しようとします。-fsed

次の式-eと次のファイルの内容は(改行文字を使用して)連結され、スクリプトが-f形成されます。sedリテラル式のみを渡したい場合は、それを省略して-eその式をオプションではなく最初の引数として渡すことができますsed

sed -e s/foo/bar/ -f file.sed -e 'a\' -e foo

実行と同じ:

sed 's/foo/bar/
content of file.sed
a\
foo'

w//コマンドの背後にある実装によっては、より多くの場所などのいくつかの場所があるため、区切られたコマンドは使用できませんr。 1行のコマンド(複数行のコマンド入力を厄介にするこのようなシェル、または複数行のコマンド入力を厄介にするこのようなシェルに役立ちます)#;a-esedcshksh編集するそれらを)。

次の場合:

sed 's/foo/bar/g'

そして

sed -e 's/foo/bar/g'

まったく違いはありません。

関連情報