Bash将带有特殊字符的配置插入到wp-config.php中

时间:2015-01-06 17:42:57

标签: wordpress bash replace sed scripting

我试图插入一个配置,用于获取我们网站的访问者(可能是)真实的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','');"下的空格中插入配置。我已经完成了其他类似的工作......

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

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

...但是特殊角色正在抛弃一切。我尝试了很多不同的引用和逃避方式,但我没有运气。

1 个答案:

答案 0 :(得分: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'周围的单引号表示字符串中的字符按字面解释。