我正在尝试使用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,
我哪里错了?
答案 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
指出的那样,您只需要找到合适的行并附加所需的文字;没有必要匹配旧值并重新插入它们。