我正在尝试使用 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,
我哪里出错了?
试试:
sed '/^disable_functions/s/$/exec,system,shell_exec,passthru,/' /etc/php5/apache2/php.ini
如果输出看起来正常,则添加-i
开关以修改文件。
$
这里,意味着行的结束。
您的原始命令缺少设置1
值的捕获组(不是$1
):
sed -ie 's/disable_functions = (.*[a-zA-z,])$/disable_functions = 1exec,system,shell_exec,passthru,/gI' /etc/php5/apache2/php.ini
但正如sputnick
指出的那样,你只需要找到合适的行并附加所需的文本;没有必要匹配旧值并重新插入它们。