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

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

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

如果要替换所有出现的TO_REPLACE,您可以执行以下操作:

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
您需要

"group"在需要替换"\1"的表达式部分周围加上括号:在这种情况下,第一个"'"之前的所有内容。

相关内容

  • 没有找到相关文章

最新更新