sed -r 与 sed - 正则表达式的可能性究竟如何扩展?

sed -r 与 sed - 正则表达式的可能性究竟如何扩展?

据我所知,在 bash 中,我可以在 sed 的正则表达式中使用 . & ^ * 之类的字符,但 -r 选项会改变正则表达式的表达方式,有点像 grep 与 grep -E。但我找不到任何关于语法变化的确切总结。有没有列表?我是不是太天真了,认为这种事情应该可以总结成一个可以打印在几页上的表格?

适用于普通的旧式非扩展 sed 正则表达式的字符是否仍能以相同的方式与 -r 选项配合使用?换句话说,不使用 -r 选项时有效的表达式是否仍然有效,并且使用 -r 选项时仍然表示相同的意思?就好像它们是使用 -r 选项时有效的表达式的子集?

我一直在想,某个地方一定有对差异的简洁总结和例子。

答案1

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

确实如此:没有:

echo "abcdef" | sed 's/\([cd]\+\)/\U\1/'
abCDef

和:

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

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

相关内容