Wordpress Bash将带有特殊字符的配置插入wp-config.php
我试图将一个用于获取(大概是)我们网站访问者真实IP的配置插入到他们各自的wp-config.php中,但我遇到了涉及大量特殊字符的问题 我计划将它添加到一个bash脚本中,以快速启动新的Wordpress安装,但实际上,我必须在每次安装后手动添加该行 这是配置Wordpress Bash将带有特殊字符的配置插入wp-config.php,wordpress,bash,replace,sed,scripting,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的一个小漏洞:
$_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. */
我原本以为我可以像处理其他类似任务一样,使用sed在“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/"
…但这些特殊角色正在抛弃一切。我尝试过许多不同的引用和逃避方式,但我没有任何运气 使用awk,您可以轻松做到这一点:
awk -vrep="$replace" '{print}/define.*WPLANG/{print RS rep}' wp-config.php
这会无条件地打印每一行。当包含“define”和“WPLANG”的行匹配时,它还会打印shell变量$replace
的值,前面有一个换行符
为了避免bash中转义字符的问题,可以将cat
与herdoc一起使用:
replace=$(cat <<'EOF'
$_SERVER['REMOTE_ADDR'] = preg_replace('/^([^,]+).*$/', '\1', $_SERVER['HTTP_X_FORWARDED_FOR']);
EOF
)
replace=$(cat I必须避开括号,但它仍然可以完美工作。谢谢