我想用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
答案 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":在这种情况下,所有内容都在第一个"'"。
之前。