什么是sed -E和sed -e之间的区别

时间:2010-06-29 08:47:36

标签: regex linux sed debian

我正在处理一些旧代码,我发现我曾经使用过

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

2 个答案:

答案 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)

来自sed's documentation

<块引用>

-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 使用第一个非选项参数作为脚本,并使用以下非选项参数作为输入文件。