sed 命令中 -e 的用途是什么?

sed 命令中 -e 的用途是什么?

我找不到有关该sed -e开关的任何文档,对于简单的替换,我需要它吗?

例如

sed 's/foo/bar/'

VS

sed -e 's/foo/bar/'

答案1

从手册页:

-e script, --expression=script

    add the script to the commands to be executed

因此,您可以使用多个-e选项来构建由多个部分组成的脚本。

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

首先替换foobar,然后删除包含 的每一行FOO

答案2

这可能对你有用:

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

在每种情况下,i(插入)、a(追加)和c(更改)命令都需要以换行符终止。

;通常命令可以用eg分隔/foo/d;/bar/d并用{...}eg分组/foo/{h;d},但对于i,a,c命令来说,它-e提供了一种分隔命令的方法。

另一种方法是使用 shell(bash) 插入换行符:

sed '/foo/i\bar'$'\n''/fred/a\barney'$'\n''/harry/c\potter' file

答案3

在帮助中sed你会发现-eflag代表:

 -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 执行。第二个选项更明确,但这可能不是您经常看到使用的原因-e。其原因是,这-e使得可以使用多个脚本来执行相同的sed.这仍然留下了一个问题:如果您只使用一个脚本,为什么还要使用它?下面的例子可以解释这一点:

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今天就可以开始使用该标志了。这样,将来您只需使用 .app 附加额外的脚本即可-e <script>

注意:在其他答案中,;建议使用多个脚本作为替代方案。虽然在某些情况下这在技术上是可行的,但并不鼓励这样做,因为它很快就会导致代码非常难以阅读。请参阅此处的示例:https://www.grymoire.com/Unix/Sed.html#uh-61

答案4

-e,相当于--expression, 是可选的,除非您将多个表达式串在一起(不常见),如另一个中所示回答

Aside:;可以在同一个表达式中替代使用,以依次执行多个表达式。

相关内容