sed 什么时候需要“-e”?

sed 什么时候需要“-e”?

我正在读书https://stackoverflow.com/a/10010364/156458,并对-esed 的选项有疑问。

如果我是正确的,-e则用于在内联 sed 命令之前。但我们可以指定一个不带 .sed 的内联 sed 命令-e。例如,以下两个对我来说作用相同:

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

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

不需要-f指定 sed 脚本。我们什么时候需要-e?在开头给出的链接中的具体情况下,我们为什么需要-e

谢谢。

答案1

man sed这在 sed ( )的手册页中得到了解答

-e script--expression=script将脚本添加到要执行的命令中

如果没有给出-e, --expression[...] 选项,则将第一个非选项参数作为sed要解释的脚本。所有剩余参数都是输入文件的名称;如果未指定输入文件,则读取标准输入。

因此,如果只有一个参数,sed它将被视为sed脚本。如果您有多个参数,则应使用-e--expression来确定哪个参数是sed脚本。

在您的具体示例中,这两种选择是同义词。

答案2

当您想要将多个表达式作为代码传递时,您通常需要使用-e(可能与 一起使用)。-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确实需要换行符(如上面的那样),因此使用多个s 是一种保留命令的方法一行命令(对于像这样的 shell 很有用,使得输入多行命令变得很尴尬,或者像这样的 shell 使得输入多行命令变得很尴尬)#;a-esedcshksh编辑他们)。

如果是:

sed 's/foo/bar/g'

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

这完全没有区别。

相关内容