How*_*ard 63 linux shell sed command text
我找不到任何关于sed -e开关的文档,为了简单的替换,我需要它吗?
例如
sed 's/foo/bar/'
Run Code Online (Sandbox Code Playgroud)
VS
sed -e 's/foo/bar/'
Run Code Online (Sandbox Code Playgroud)
小智 40
从手册页:
-e script, --expression=script
add the script to the commands to be executed
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用多个-e选项来构建包含多个部分的脚本。
$ sed -e "s/foo/bar/" -e "/FOO/d"
Run Code Online (Sandbox Code Playgroud)
将首先替换foo为bar然后删除包含FOO.
小智 28
这可能对你有用:
sed -e '/foo/i\' -e 'bar' -e '/fred/a\' -e 'barny' -e '/harry/c\' -e 'potter' file
Run Code Online (Sandbox Code Playgroud)
在每种情况下,i(insert)、a(append) 和c(change) 命令都需要以换行符终止。
通常命令可以用;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
Run Code Online (Sandbox Code Playgroud)
小智 12
在帮助中sed你会发现-eflag代表:
-e script, --expression=script
add the script to the commands to be executed
Run Code Online (Sandbox Code Playgroud)
你不是第一个遇到后感到困惑的-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