Regex 正则表达式替换为sed
我正在PHP文件中进行重放,我需要用sed更改语言变量。这里是我的工作代码:Regex 正则表达式替换为sed,regex,linux,bash,command-line,sed,Regex,Linux,Bash,Command Line,Sed,我正在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['l
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
怎么了?在
sed
中,星号(*
)字符表示“重复上一件事0次或更多次”。这与shell不同,shell可以扩展到任何内容。你要做的是在星号前推一个
(意思是“任何东西”),如下所示:
sed -i '' -e "s/\$config\['language'\] = \".*\";/\$config['language'] = '$LANGUAGE';/" Sources/$APP/application/config/config.php
这将告诉您的程序“重复任何字符(
)任意次数(*
)”在sed
中,星号(*
)字符表示“重复上一件事0次或更多次”。这与shell不同,后者扩展为任何内容。你要做的是在星号前推一个
(意思是“任何东西”),如下所示:
sed -i '' -e "s/\$config\['language'\] = \".*\";/\$config['language'] = '$LANGUAGE';/" Sources/$APP/application/config/config.php
这将告诉您的程序“重复任意字符(
)任意次数(*
)”,这是因为*
不会做您认为它会做的事情。在sed
正则表达式中,与在所有正则表达式中一样,使用*?
表示任何字符集合(新行除外)。这是因为
表示匹配任何项目一次,*
表示匹配上一项任意次数。?
使其非贪婪,这意味着只要其余表达式匹配,它将匹配尽可能少的字符。我不知道你输入的是什么,所以我不能告诉你是否需要问号,安全总比抱歉好。那是因为*
没有做你认为它做的事。在sed
正则表达式中,与在所有正则表达式中一样,使用*?
表示任何字符集合(新行除外)。这是因为
表示匹配任何项目一次,*
表示匹配上一项任意次数。?
使其非贪婪,这意味着只要其余表达式匹配,它将匹配尽可能少的字符。我不知道您输入的是什么,因此我无法判断您是否需要问号,安全性比抱歉好。您需要将表达式中的*
替换为*
*
表示“上一项的0个或多个实例”(在本例中为”
),因此您希望首先匹配
(任何字符),然后声明您希望该项的0个或多个实例。您需要将表达式中的*
替换为*
表示前一项的0个或多个实例”(在本例中为“
),因此您希望首先匹配
(任何字符),然后声明您希望该项的0个或多个实例