为什么这个与 sed 一起使用的正则表达式会导致解析错误?
Why do this regular expression used with sed result in a parse error?
我正在尝试使用 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\.]+([\"\'][,]?)/.2.4/'
这是我的 shell 告诉我的:
zsh: parse error near `)'
我在一些在线正则表达式测试仪上尝试了相同的正则表达式(减去替换部分),它似乎在那里工作。那么,当我将它与 sed
一起使用时,为什么它不起作用?
单引号中的单引号不能反斜杠。在zsh中,可以用''
把单引号换成单引号,或者用更便携的'\''
(在bash和zsh都测试过):
echo " 'version' => '1.2.3', " \
| sed -E 's/(\s*[\"'\'']version[\"'\'']\s*=>\s*[\"'\''])[-_a-zA-Z0-9\.]+([\"'\''],?)/.2.4/'
我也把[\s]
改成了\s
,把[,]
改成了,
,因为它们是等价的,但后者更简单。
我正在尝试使用 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\.]+([\"\'][,]?)/.2.4/'
这是我的 shell 告诉我的:
zsh: parse error near `)'
我在一些在线正则表达式测试仪上尝试了相同的正则表达式(减去替换部分),它似乎在那里工作。那么,当我将它与 sed
一起使用时,为什么它不起作用?
单引号中的单引号不能反斜杠。在zsh中,可以用''
把单引号换成单引号,或者用更便携的'\''
(在bash和zsh都测试过):
echo " 'version' => '1.2.3', " \
| sed -E 's/(\s*[\"'\'']version[\"'\'']\s*=>\s*[\"'\''])[-_a-zA-Z0-9\.]+([\"'\''],?)/.2.4/'
我也把[\s]
改成了\s
,把[,]
改成了,
,因为它们是等价的,但后者更简单。