尝试匹配字符串并将其添加到替换

时间:2012-10-12 13:33:53

标签: regex linux bash sed

我正在尝试使用sed和regex将一个字符串添加到行尾。

我有以下字符串:

disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

我试图在其末尾添加字符串:

exec,system,shell_exec,passthru,

我的尝试如下:

sed -ie 's/disable_functions = .*[a-zA-z,]$/disable_functions = $1exec,system,shell_exec,passthru,/gI' /etc/php5/apache2/php.ini

似乎只需将$ 1添加到字符串disable_functions = $ 1exec,system,shell_exec,passthru,

我哪里错了?

2 个答案:

答案 0 :(得分:2)

试试:

sed '/^disable_functions/s/$/exec,system,shell_exec,passthru,/' /etc/php5/apache2/php.ini

如果输出似乎正常,则添加-i开关以修改文件。

$此处,表示行尾

答案 1 :(得分:1)

原始命令缺少设置\1(不是$1)值的捕获组:

sed -ie 's/disable_functions = \(.*[a-zA-z,])\$/disable_functions = \1exec,system,shell_exec,passthru,/gI' /etc/php5/apache2/php.ini

但正如sputnick指出的那样,您只需要找到合适的行并附加所需的文字;没有必要匹配旧值并重新插入它们。