Php 将网站文件中的多行替换为一行:bash?python

Php 将网站文件中的多行替换为一行:bash?python,php,python,bash,sed,Php,Python,Bash,Sed,我正在寻找一个命令行解决方案,在Linux服务器上用一个更安全的字符串替换php文件中可能存在危险的字符串。我希望在所有托管站点中执行替换,然后将其作为日常cronjob运行,以确保更安全。 我想Bash或PHP将是完美的,但如果Python更高效的话,我也可以使用Python。 我可以找到许多例子,但无法将它们应用到我的案例中,即 扫描/home/vhosts/sitename/中的所有/httpdocs/子目录,但扫描/home/vhosts中的所有文件也可以 确定是否有包含多行代码的文件,

我正在寻找一个命令行解决方案,在Linux服务器上用一个更安全的字符串替换php文件中可能存在危险的字符串。我希望在所有托管站点中执行替换,然后将其作为日常cronjob运行,以确保更安全。 我想Bash或PHP将是完美的,但如果Python更高效的话,我也可以使用Python。 我可以找到许多例子,但无法将它们应用到我的案例中,即

扫描/home/vhosts/sitename/中的所有/httpdocs/子目录,但扫描/home/vhosts中的所有文件也可以

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

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

如果是这样,更换它?与

$authsites = array ();
并记录它替换它的位置


非常感谢您的帮助。

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

perl -pi -e 's/FIND IT/REPLACE IT' /home/name/public_html/html/*.html 
这个awk单轮怎么样。您可以将其与“查找”或“for循环”一起使用,以进行质量替换

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

像这样的for循环可以工作,尽管可能有更好的方法

您可以根据文件更改名称


可以用我的多行代码来查找:$allowedSites=array'flickr.com'、'picasa.com'、'blogger.com'、'wordpress.com'、'img.youtube.com'、'upload.wikimedia.org'、?编辑器会删除换行符,但这会超过8行吗?如果是cron工作,我会用你喜欢的语言写。最终结果是一样的。就个人而言,我可能会避免使用awk——它是一个强大的工具,但它基于分隔符,并且您的客户端代码可能并不总是匹配的。你不想错过任何东西。不确定文件名可以是什么,所以我必须搜索所有文件:-键入f-name*?\$authsites中的grep可以是我的多行代码吗?你可以使用grep-HE\$authsites\$allowedSites\$搜索不同的代码行-E是扩展正则表达式,|是或符号。您还必须在awk脚本中添加这些相同的值。awk'/\$authsites\\$allowedSites\\$something/我仍然会写下所有可能的字符串,并在第一次通过时使用一些字符串进行尝试。如果一切正常,您可以进行代码比较,然后添加所有剩余的替换并运行它。您的原始代码不会受到影响,因为在执行$i>$i.new时,所有更改都会转到一个新文件。这使您可以灵活地删除所有.new文件并重新开始。
[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 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