sed -r 与 sed - 正则表达式的可能性到底是如何扩展的?

Lew*_*Fan 5 linux bash regex sed

据我了解,在 bash 中,我可以使用 . & ^ * 在 sed 的正则表达式中,但是 -r 选项改变了正则表达式的表达方式,呃,表达方式的本质,有点像 grep 与 grep -E。但我找不到语法具体如何变化的任何摘要。某处有一个列表吗?我是否天真地认为这种事情应该可以总结在一张可以打印在几页纸上的表格中?

与普通旧的非扩展 sed 正则表达式一起使用的字符是否仍然以与 -r 选项相同的方式工作?换句话说,不使用 -r 选项时有效的表达式是否仍然有效,并且使用 -r 选项时仍然表示相同的含义?就像它们是使用 -r 选项有效的表达式的子集一样?

我一直认为一定有一个关于差异的简洁总结与某处的例子。

xen*_*oid 7

根据info sed扩展正则表达式是 'egrep' 接受的;它们可以更清晰,因为它们通常具有较少的反斜杠,但它们是 GNU 扩展,因此使用它们的脚本不可移植egrep是 的同义词grep -E

情况确实如此:没有:

echo "abcdef" | sed 's/\([cd]\+\)/\U\1/'
abCDef
Run Code Online (Sandbox Code Playgroud)

和:

echo "abcdef" | sed -r 's/([cd]+)/\U\1/'
abCDef
Run Code Online (Sandbox Code Playgroud)

有些表达式可能对两者都有效,但在许多情况下它们的解释会有所不同。我完全无法理解常规的、符合 POSIX 标准的 sed 中的字符转义逻辑。