在Bash中删除单引号

时间:2017-07-01 01:40:03

标签: bash shell composer-php

我使用Composer运行一些Bash / Shell命令。

所以我要做的就是替换' database_name_here'使用' $ _ ENV [' DB_NAME']'。

    "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命令识别单引号并删除它们。

非常感谢任何帮助。

谢谢,杰克。

1 个答案:

答案 0 :(得分: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]);

或者,您可以使用双引号作为外部分隔符:

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