我正在处理一些旧代码,我发现我曾经使用过
sed -E 's/findText/replaceWith/g' #findText would contain a regex
但我现在尝试
sed -e 's/findText/replaceWith/g'
它似乎做同样的事情,或者它呢? 我有点记得有一个原因我做了但我不记得做“man sed”并没有帮助,因为他们没有任何关于-E only -e,这对于以太没有多大意义。
-e, --expression=script
Append the editing commands in script to the end of
the editing command script. script may contain more
than one newline separated command.
我认为 - 这意味着它会与正则表达式相匹配......
GNU sed version 4.2.1
答案 0 :(得分:31)
从源代码开始,-E
是一个未记录的选项,用于与BSD sed兼容。
/* Undocumented, for compatibility with BSD sed. */
case 'E':
case 'r':
if (extended_regexp_flags)
usage(4);
extended_regexp_flags = REG_EXTENDED;
break;
来自manual,BSD sed中的-E
用于支持扩展的正则表达式。
答案 1 :(得分:0)
-E
<块引用>-r
<块引用>--regexp-extended
<块引用>使用扩展的正则表达式而不是基本的正则表达式。扩展正则表达式是 egrep 接受的那些;它们可以更清晰,因为它们通常具有较少的反斜杠。从历史上看,这是一个 GNU 扩展,但 -E 扩展已被添加到 POSIX 标准 (http://austingroupbugs.net/view.php?id=528),因此使用 -E 以实现可移植性。 GNU sed 多年来一直接受 -E 作为未公开的选项,*BSD seds 也接受 -E 多年,但使用 -E 的脚本可能无法移植到其他旧系统。请参阅扩展正则表达式。
因此,-E
似乎应该是声明您将使用 (E) 扩展正则表达式的首选方式,而不是 -r
。
相反,-e
只是指定接下来是您要使用 sed
执行的脚本(类似于 's/bla/abl/g'
)。
始终来自文档:
<块引用>在没有 -e 或 -f 选项的情况下,sed 使用第一个非选项参数作为脚本,并使用以下非选项参数作为输入文件。