2017-07-01 59 views
0

我正在使用Composer来运行一些Bash/Shell命令。在Bash中删除单引号

所以我试图做的是用'$ _ENV ['DB_NAME']'替换'database_name_here'。

"post-update-cmd": [ 
     "sed -i.bak 's/database_name_here/$_ENV['DB_NAME']/g' public/wp-config.php" 
    ] 

它开始,因为这

define('DB_NAME', 'database_name_here'); 

这是即时得到结果。

define('DB_NAME', '$_ENV[DB_NAME]'); 

但它需要是这样(没有围绕单引号$ _ENV [DB_NAME])

define('DB_NAME', $_ENV[DB_NAME]); 

有什么事情我可以做,使sed命令识别单引号和删除它们。

任何帮助将不胜感激。

谢谢,杰克。

回答

2

你可以得到sed识别和使用\x27而不是明确的单引号替换单引号:

sed -i.bak 's/\x27database_name_here\x27/$_ENV[DB_NAME]/g' test.txt 

鉴于此输入:

define('DB_NAME', 'database_name_here'); 

输出为:

define('DB_NAME', $_ENV[DB_NAME]); 

另外,你可以使用双引号为t他以外的分隔符:

sed -i.bak "s/'database_name_here'/$_ENV[DB_NAME]/g" test.txt 

或者另一种选择,保持单引号在外面,就是用双引号内的单引号隔离:

sed -i.bak 's/'"'"'database_name_here'"'"'/$_ENV[DB_NAME]/g' test.txt 

类似的解决方案在使用反斜杠逃脱孤立报价之间的单引号:

sed -i.bak 's/'\''database_name_here'\''/$_ENV[DB_NAME]/g' test.txt 
+0

感谢的是,这是我的错误 - > [SELD \ JsonLint \ ParsingException] “./composer.json”不包含有效Ĵ SON 第23行解析错误: ... g.php“,”sed -i.bak's/\ x27d ---------------------^ 无效的字符串,看起来你有一个未转义的反斜杠在:\ x - 看起来你有一个额外的 尾随逗号 –

+0

我不知道我明白错误来自哪里......我只是从我的答案复制行到一个Bash外壳,它在那里工作.... –

+0

我已经添加了几个替代解决方案。 –