【问题标题】:Bash insert config with special characters into wp-config.phpBash 将带有特殊字符的配置插入 wp-config.php
【发布时间】:2015-03-04 10:40:19
【问题描述】:

我正在尝试将用于获取我们网站访问者的(可能)真实 IP 的配置插入到他们各自的 wp-config.php 中,但我遇到了涉及大量特殊字符的问题.

我计划将此添加到一个 bash 脚本中,该脚本可以快速启动新的 Wordpress 安装,但我必须在每次安装后手动添加该行。

这是配置...

$_SERVER['REMOTE_ADDR'] = preg_replace('/^([^,]+).*$/', '\1', $_SERVER['HTTP_X_FORWARDED_FOR']);

wp-config.php 的片段:

$table_prefix = 'wp_';

define('WPLANG', '');



/* That's all, stop editing! Happy blogging. */ 

我原本以为我可以在“define('WPLANG', '');”下的空白处插入配置使用 sed 就像我对其他类似任务所做的那样......

find="define('WPLANG', '');"
replace="$_SERVER['REMOTE_ADDR'] = preg_replace('/^([^,]+).*$/', '\1', $_SERVER['HTTP_X_FORWARDED_FOR']);"

sed "s/$find\n\n/$find\n$replace/"

...但是特殊字符正在抛弃一切。我尝试了许多不同的引用和转义方式,但我没有任何运气。

【问题讨论】:

    标签: wordpress bash replace sed scripting


    【解决方案1】:

    您可以使用 awk 轻松做到这一点:

    awk -vrep="$replace" '{print}/define.*WPLANG/{print RS rep}' wp-config.php
    

    这会无条件地打印每一行。当包含“define”和“WPLANG”的行匹配时,它还会打印shell变量$replace的值,前面有一个换行符。

    为了避免在 bash 中转义字符出现问题,您可以将 cat 与 HEREDOC 一起使用:

    replace=$(cat <<'EOF'
    $_SERVER['REMOTE_ADDR'] = preg_replace('/^([^,]+).*$/', '\1', $_SERVER['HTTP_X_FORWARDED_FOR']);
    EOF
    )
    

    'EOF' 周围的单引号表示字符串中的字符按字面意思解释。

    【讨论】:

    • 我不得不转义括号,但它仍然可以完美运行。谢谢
    猜你喜欢
    • 2015-07-07
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-07
    • 2015-02-05
    • 2019-04-27
    • 2011-12-10
    • 2016-11-24
    相关资源
    最近更新 更多