我正在寻找一个命令行解决方案,以便在Linux服务器上用更安全的文件替换php文件中的潜在危险字符串。我想在所有托管网站中进行替换,然后让它作为每日cronjob运行,以便更安全。 我猜Bash或PHP会很完美,但如果效率更高,我对Python很好。 我可以找到很多例子,但不能适应我的情况,这是
扫描/ home / vhosts /(sitename)/中的所有/ httpdocs /子目录,但扫描/ home / vhosts中的所有文件也是如此。
确定是否有包含多行代码的文件,即
$authsites = array (
'flickr.com',
'picasa.com',
'blah.com',
);
如果是,请用
替换它(sed?)$authsites = array ();
并记录它取代它的地方。
非常感谢,谢谢。
答案 0 :(得分:0)
我使用命令行perl进行批量搜索并替换
perl -pi -e 's/FIND IT/REPLACE IT' /home/name/public_html/html/*.html
答案 1 :(得分:0)
这个awk
单行怎么样?您可以将其与find
或for 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