Замена нескольких строк по одной в файлах сайтов: bash?питон? - PullRequest
0 голосов
/ 02 декабря 2011

Я ищу решение командной строки для замены потенциально опасной строки в файлах php на более безопасную на сервере Linux.Я хотел бы провести замену во всех размещенных на сайте сайтах, а затем сделать так, чтобы ежедневная работа выполнялась как более безопасная.Я думаю, что Bash или PHP были бы идеальными, но я согласен с Python, если это более эффективно.Я мог найти много примеров, но не смог адаптировать их к моему случаю, а именно:

  • сканировать все / httpdocs / подкаталоги в / home / vhosts / (sitename) / но сканировать все файлы в /home / vhosts тоже подойдет.

  • определить, есть ли файл, содержащий многострочный код, то есть

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

и если это так, замените его (sed?) На

$authsites = array ();

и укажите, где он его заменил.

Помощь, высоко оцененная, спасибо.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2011

Как насчет 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 ( );

A 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
0 голосов
/ 02 декабря 2011

я использую Perl командной строки для массового поиска и заменяю

perl -pi -e 's/FIND IT/REPLACE IT' /home/name/public_html/html/*.html 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...