Answers:
从手册页:
-e script, --expression=script
add the script to the commands to be executed
因此,您可以使用多个-e
选项从多个部分构建脚本。
$ sed -e "s/foo/bar/" -e "/FOO/d"
首先将替换foo
为bar
,然后删除包含的每一行FOO
。
-e
这可能对您有用:
sed -e '/foo/i\' -e 'bar' -e '/fred/a\' -e 'barny' -e '/harry/c\' -e 'potter' file
在每种情况下,i
(插入),a
(添加)和c
(更改)命令都需要用换行符终止。
通常,命令可以用;
例如分隔,/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
-e
而不是分号来结束标签和分支命令。这将不起作用:sed ':a; /x/ { s/x/y/g; ba }; q' <<< "jxm"
。但这将是:sed -e ':a' -e '/x/ { s/x/y/g; ba' -e '}; q' <<< "jxm"
must be terminated with a newline
句话在这里有多必要。当我在自己的这里测试时cygwin
,此方法有效:sed '/foo/i\bar' file
。因此,既然我们可以将单独的表达式融合为一个,这又引出了最初的问题:的真正目的是-e
什么?
在帮助中,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执行的。第二个选项更为明确,但这可能不是您经常看到-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
今天就可以开始使用该标志。这样,将来您可以使用来向命令附加一个额外的脚本-e <script>
。
注意在其他答案中;
,建议使用替代方法来使用多个脚本。尽管在某些情况下从技术上讲这是可能的,但不建议这样做,因为它很快导致很难阅读代码。在此处查看示例:https : //www.grymoire.com/Unix/Sed.html#uh-61
man sed
吗?