我想用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"的表达式部分周围加上括号:在这种情况下,第一个"'"之前的所有内容。