2

我正在尝试使用 sed 和正则表达式将字符串添加到行尾。

我有以下字符串:

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,

我哪里错了?

4

2 回答 2

2

试试看:

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

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

$在这里,意思是行尾

于 2012-10-12T13:35:17.963 回答
1

\1您的原始命令缺少设置(not )值的捕获组$1

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

但正如所sputnick指出的,您只需要找到适当的行并附加所需的文本;无需匹配旧值并重新插入它们。

于 2012-10-12T13:40:46.570 回答