sed for sed的正则表达式替换(无效参考)

时间:2014-11-16 23:34:45

标签: regex bash sed

我想用shell和regex替换一行中的字符串。

例如,在文件configuration.php中,我想将TO_REPLACE替换为OK_REPLACED

public $user = 'TO_REPLACE';

我试过这个命令:

cd ~/public_html; sed -i "s/^\public $user = *'[^']*'/\1OK_REPLACED'/g" configuration.php

但我收到此错误

sed: -e expression #1, char 39: invalid reference \1 on `s' command's RHS

我也试过这个,但没有什么

sed -i "s/^\(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php

3 个答案:

答案 0 :(得分:1)

替换中的

\1将替换为与正则表达式中第一个捕获组匹配的任何内容,但您没有捕获组。您需要将捕获组放在要复制到替换的原始行的各个部分周围。

sed -i "s/^\(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php

如果您想要替换所有出现的TO_REPLACE,您可以这样做:

sed -i 's/TO_REPLACE/OK_REPLACED/g' configuration.php

答案 1 :(得分:1)

我认为你的括号必须平衡。你的第一个以反斜杠为前缀,但第二个则不是。试试这个:

sed -i "s/^\(public \$user = *'\)[^']*'/\1OK_REPLACED'/g" configuration.php

或者这个:

sed -r -i "s/^(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php

答案 2 :(得分:0)

你需要" group"将括号括在表达式的周围,你需要替换" \ 1":在这种情况下,所有内容都在第一个"'"。

之前。