Regex sed中用于搜索和替换的正则表达式(无效引用)

Regex sed中用于搜索和替换的正则表达式(无效引用),regex,bash,sed,Regex,Bash,Sed,我想用shell和regex替换一行中的字符串 例如,在configuration.php文件中,我想用OK替换为\u替换: 我试过这个命令: 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 我

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

例如,在configuration.php文件中,我想用OK替换为\u替换:

我试过这个命令:

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

您需要在需要替换的表达式片段周围加上括号:在本例中,替换中第一个“.”之前的所有内容都将替换为与regexp中第一个捕获组匹配的内容,但您没有捕获组。您需要在原始行中要复制到替换行的部分周围放置捕获组

sed -i "s/^\(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php
如果要替换要替换的所有引用,只需执行以下操作:

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

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

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

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

您好,非常感谢您现在使用我得到的新命令:sed:-e expression 1,char 44:s'命令的RHS'上的无效引用\2我不明白为什么\1获取公共部分,\2获取所有匹配项=*'[^']*'您好,您可以随意更改代码,我只想用OK替换为\u REPLACEDHello Barmar,谢谢;对于已编辑的命令,没有错误消息,但第二次没有更改:sed:-e表达式1,char 0:没有以前的正则表达式h,我非常困惑。我认为$user是一个bash变量,包含您想要替换的名称。给我一分钟。你好,谢谢。你能给我举个例子吗?我尝试了几种可能性,但什么也没有:我会这样做:sed s/public\$user='[^']*'/\1OK\u REPLACED\2/g这应该可以解决未定义的引用问题。但是我没有检查其他任何东西。。如果出现进一步的问题而您无法解决,请将其发布。
sed -r -i "s/^(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php