Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式替换为sed_Regex_Linux_Bash_Command Line_Sed - Fatal编程技术网

Regex 正则表达式替换为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

我正在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

怎么了?

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个或多个实例