在网站文件中用一行替换多行:bash?蟒蛇?

时间:2011-12-01 20:12:17

标签: php python bash sed

我正在寻找一个命令行解决方案,以便在Linux服务器上用更安全的文件替换php文件中的潜在危险字符串。我想在所有托管网站中进行替换,然后让它作为每日cronjob运行,以便更安全。 我猜Bash或PHP会很完美,但如果效率更高,我对Python很好。 我可以找到很多例子,但不能适应我的情况,这是

  • 扫描/ home / vhosts /(sitename)/中的所有/ httpdocs /子目录,但扫描/ home / vhosts中的所有文件也是如此。

  • 确定是否有包含多行代码的文件,即

$authsites = array ( 'flickr.com', 'picasa.com', 'blah.com', );

如果是,请用

替换它(sed?)
$authsites = array ();

并记录它取代它的地方。

非常感谢,谢谢。

2 个答案:

答案 0 :(得分:0)

我使用命令行perl进行批量搜索并替换

perl -pi -e 's/FIND IT/REPLACE IT' /home/name/public_html/html/*.html 

答案 1 :(得分:0)

这个awk单行怎么样?您可以将其与findfor loop一起使用来进行批量替换。

awk '/\$authsites/{sub(/\(.*\)/,"( )");print;next}1' INPUTFILE

<强>测试

[jaypal:~/Temp] cat file00
$authsites = array ( 'flickr.com', 'picasa.com', 'blah.com', );
$authsites = array ( 'flickr.com', 'aaaa.com', 'blah.com', );
fefe
efef
$authsites = array ( 'flickr.com', 'picasa.com', );

[jaypal:~/Temp] awk '/\$authsites/{sub(/\(.*\)/,"( )");print;next}1' file00
$authsites = array ( );
$authsites = array ( );
fefe
efef
$authsites = array ( );

这样的for loop可以起作用(虽然可能有更好的方法)

您可以根据文件更改名称

for i in $(find . -type f -name "file*" -exec grep -H "\$authsites" {} \;| cut -d":" -f1 | uniq); do awk '/\$authsites/{sub(/\(.*\)/,"( )");print;next}1' $i > $i.new; done