我想使用sed将一些PHP代码添加到我的Wordpress /* =WordPress Core
-------------------------------------------------------------- */
.aligncenter,
div.aligncenter {
display: block;
margin: 5px auto 5px auto;
}
a img.aligncenter {
display: block;
margin-left: auto;
margin-right: auto
}
文件中。但是在添加时,sed会忽略我添加的文字中的wp-config.php
。
我想添加这些行
'
开始if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
$forwarded_ips = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );
$_SERVER['REMOTE_ADDR'] = $forwarded_ips[0];
unset( $forwarded_ips );
}
标记后。
这是我使用的sed命令:
php
一切都很顺利,但是sed忽略了单引号sed -i '/<?php/a "if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {\n\t$forwarded_ips = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );\n\t$_SERVER['REMOTE_ADDR'] = $forwarded_ips[0];\n\tunset( $forwarded_ips );\n}"' wp-config.php
。
我的输出如下所示:
'
但我想要一些如下的内容:
if ( !empty( $_SERVER[HTTP_X_FORWARDED_FOR] ) ) {
$forwarded_ips = explode( ,, $_SERVER[HTTP_X_FORWARDED_FOR] );
$_SERVER[REMOTE_ADDR] = $forwarded_ips[0];
unset( $forwarded_ips );
}
Sed忽略了字符if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
$forwarded_ips = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );
$_SERVER['REMOTE_ADDR'] = $forwarded_ips[0];
unset( $forwarded_ips );
}
并为该字符添加了空格。
答案 0 :(得分:2)
您遇到问题的原因是您在sed命令周围使用单引号,并且还在您尝试插入的字符串中使用。这意味着你拥有的是单引号中命令的第一部分,后跟引号之外的字符串HTTP_X_FORWARDED_FOR
等。
请改为尝试:
sed -i -f script.sed wp-config.php
script.sed
包含以下内容:
/<?php/a\
if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {\
$forwarded_ips = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );\
$_SERVER['REMOTE_ADDR'] = $forwarded_ips[0];\
unset( $forwarded_ips );\
}
使用脚本文件意味着您不必担心在sed命令中使用引号。它还允许您更清楚地写出要添加的文本 - 您唯一需要记住的是在字符串中每行的末尾添加\
。
答案 1 :(得分:0)
使用r
命令读取文件的替代解决方案:
我们的PHP文件test.php
如下所示:
<?php
echo "Hello World";
echo "\n";
?>
我们可以将逐字记录的完整内容放入单独的文件中insert
:
if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
$forwarded_ips = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );
$_SERVER['REMOTE_ADDR'] = $forwarded_ips[0];
unset( $forwarded_ips );
}
r
命令将文件名作为参数,并在当前周期结束时打印其内容,处理任何引用和特殊字符问题:
$ sed '/<?php/r insert' test.php
<?php
if ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
$forwarded_ips = explode( ',', $_SERVER['HTTP_X_FORWARDED_FOR'] );
$_SERVER['REMOTE_ADDR'] = $forwarded_ips[0];
unset( $forwarded_ips );
}
echo "Hello World";
echo "\n";
?>
要修复缩进,我们可以相应缩进insert
中的代码。