单引号内的sed命令字符串变量连接

时间:2015-08-24 21:57:05

标签: linux sed concatenation

我想使用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行

感谢您的帮助。

1 个答案:

答案 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