我正在PHP文件中进行替换,我需要使用sed更改语言变量。这是我的工作代码:
sed -i '' -e "s/\$config\['language'\] = \"english\";/\$config['language'] = '$LANGUAGE';/" Sources/$APP/application/config/config.php
这不符合任何语言集:
sed -i '' -e "s/\$config\['language'\] = \"*\";/\$config['language'] = '$LANGUAGE';/" Sources/$APP/application/config/config.php
怎么了?
答案 0 :(得分:1)
在sed
中,星号(*
)字符表示“重复前一次0次或更多次”。这与外壳相反,它可以扩展到任何东西。你想要做的是在星号之前推一个.
(意思是“任何东西”),如下所示:
sed -i '' -e "s/\$config\['language'\] = \".*\";/\$config['language'] = '$LANGUAGE';/" Sources/$APP/application/config/config.php
然后会告诉你的程序“重复任何字符(.
)任意次(*
)”。
答案 1 :(得分:1)
那是因为*
没有按照您的想法行事。在sed
正则表达式中,与所有正则表达式一样,使用.*?
表示任何字符集合(换行符除外)。这是因为.
表示匹配任何一次,*
表示与前一项匹配任意次。 ?
使其非贪婪,这意味着只要表达式的其余部分匹配,它就会匹配尽可能少的字符。我不知道你输入了什么,所以我无法判断你是否需要问号,比抱歉更安全。
答案 2 :(得分:1)
您需要将表达式中的*
替换为.*
。 *
表示“前一项的0个或多个实例”(在本例中为"
),因此您要先匹配.
(任何字符),然后声明您想要0或更多的实例。