为什么这个与sed一起使用的正则表达式会导致解析错误?

时间:2016-07-13 09:47:24

标签: regex sed zsh

我尝试使用sed'version' => '1.2.3',替换为'version' => '1.2.4',

以下是我尝试的内容:

echo " 'version' => '1.2.3', " | sed -E 's/([\s]*[\"\']version[\"\'][\s]*=>[\s]*[\"\'])[-_a-zA-Z0-9\.]+([\"\'][,]?)/\11.2.4\2/'

这是我的shell告诉我的内容:

zsh: parse error near `)'

我在一些在线正则表达式测试人员上尝试了相同的正则表达式(减去替换部分),它似乎在那里工作。那么,当我将它与sed一起使用时,为什么它不起作用?

1 个答案:

答案 0 :(得分:2)

您不能用单引号反斜杠单引号。在zsh中,您可以使用''将单引号放入单引号中,或使用更可移植的'\''(在bash和zsh中都进行测试):

echo " 'version' => '1.2.3', " \
| sed -E 's/(\s*[\"'\'']version[\"'\'']\s*=>\s*[\"'\''])[-_a-zA-Z0-9\.]+([\"'\''],?)/\11.2.4\2/'

我还将[\s]更改为\s,将[,]更改为,,因为它们相同,但后者更简单。