“括号不平衡”即使我逃脱了它?

Dis*_*ame 10 sed text-processing regular-expression

我正在尝试运行这个简单的sed命令

sed '/VALUES\ \([0-9]/d!'
Run Code Online (Sandbox Code Playgroud)

它仍然给我一个错误说"RE error: parentheses not balanced"(是的引号在那里)。

我能做什么?我的意思是我可以添加另一个)但它与我的正则表达式不匹配。

mur*_*uru 13

转义符(sed以下方面具有特殊含义:用于反向引用。要匹配文字(,只需使用它而不使用反斜杠:/VALUES ([0-9]/d!

如果您试图匹配\(,则转义\\\(

逃离(空间)没有区别。


cuo*_*glm 5

默认情况下,sed使用基本正则表达式 (BRE)。在BRE,\(\)用于定义子表达式

子表达式可以通过将其包含在字符对“(”和“)”之间来定义在 BRE 中。这样的子表达式应匹配它在没有“(”和“)”的情况下匹配的任何内容,除了子表达式内的锚定是可选行为;请参阅 BRE 表达式锚定。子表达式可以任意嵌套。

然后,您可以使用反向引用表达式'\n'来匹配相同的(可能为空的)字符串,该字符串与包含在\(and之间的子表达式匹配\),其中nfrom19。在这里,您只使用左括号\(sed找不到右括号并引发错误。

在 BRE 中,您只是(用来匹配文字左括号。

在某些sed实现中,您可以切换到扩展正则表达式 (ERE)(例如带有选项的GNU sed-r),因此您必须使用\(来匹配文字左括号。