我想使用sed修改php.ini文件中的include_path指令。下面,我有一个查找字符串的命令,并在匹配后将指令放在一行上。但是,我仍然无法在$ {install_path}变量中维护双引号的情况下使用它。双引号必须在那里。
我要编辑的文件是php.ini。以下是我的目标之前和之后的几行,即“UNIX:”之后的行:
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
; UNIX: "/path1:/path2"
;include_path = "/path1:/path2"
;
; Windows: "\path1;\path2"
install_path定义为:
install_path="/var/www/mainapp"
我在下面使用的sed命令搜索字符串匹配,然后在它下面创建一个新行:
sed -i '/; UNIX: "\/path1:\/path2"/a include_path = "${install_path}/lib"' /etc/php.ini
php.ini中的预期输出是:
; UNIX: "/path1:/path2"
include_path = "/var/www/mainapp/lib"
在“; UNIX:...”
行后面创建了include_path行感谢您的帮助。
答案 0 :(得分:0)
sed用于单个行上的简单替换,即全部。对于任何更有趣的东西,你应该使用awk。你有可能想要这样的东西:
awk -v install_path="$install_path" '
{ print }
/; UNIX: "\/path1:\/path2"/ { printf "include_path = \"%s/lib\"\n", install_path }
' /etc/php.ini
但没有样本输入和预期输出,这是一个猜测。要替换原始文件的内容,只需在末尾添加> tmp && mv tmp /etc/php.ini
或使用GNU awk预先使用-i inplace
。