Bash 将带有特殊字符的配置插入 wp-config.php
Bash insert config with special characters into wp-config.php
我正在尝试将用于获取我们网站访问者的(大概)真实 IP 的配置插入到他们各自的 wp-config.php,但我遇到了大量问题涉及的特殊字符数。
我计划将此添加到一个 bash 脚本中,该脚本可以快速启动新的 Wordpress 安装,但实际上我必须在每次安装后手动添加该行。
这是配置...
$_SERVER['REMOTE_ADDR'] = preg_replace('/^([^,]+).*$/', '', $_SERVER['HTTP_X_FORWARDED_FOR']);
wp 的 snipit-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('/^([^,]+).*$/', '', $_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
与 HEREDOC 一起使用:
replace=$(cat <<'EOF'
$_SERVER['REMOTE_ADDR'] = preg_replace('/^([^,]+).*$/', '', $_SERVER['HTTP_X_FORWARDED_FOR']);
EOF
)
'EOF'
两边的单引号表示字符串中的字符按字面解释。
我正在尝试将用于获取我们网站访问者的(大概)真实 IP 的配置插入到他们各自的 wp-config.php,但我遇到了大量问题涉及的特殊字符数。
我计划将此添加到一个 bash 脚本中,该脚本可以快速启动新的 Wordpress 安装,但实际上我必须在每次安装后手动添加该行。
这是配置...
$_SERVER['REMOTE_ADDR'] = preg_replace('/^([^,]+).*$/', '', $_SERVER['HTTP_X_FORWARDED_FOR']);
wp 的 snipit-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('/^([^,]+).*$/', '', $_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
与 HEREDOC 一起使用:
replace=$(cat <<'EOF'
$_SERVER['REMOTE_ADDR'] = preg_replace('/^([^,]+).*$/', '', $_SERVER['HTTP_X_FORWARDED_FOR']);
EOF
)
'EOF'
两边的单引号表示字符串中的字符按字面解释。