Назад | Перейти на главную страницу

Найдите текст, затем вставьте разрыв строки и некоторый PHP-код в несколько файлов

У меня есть определенный комментарий кода php, который появляется примерно в 75 файлах нескольких пользователей. Эта команда успешно находит его. (Я не стал искать двойные косые черты, потому что не был уверен, как их избежать, и они действительно не имеют значения для этого матча.)

grep -l -r "calls the myfunc() function" /home/*/public_html   

После того, как я его найду, мне нужно добавить разрыв строки и еще немного кода PHP, например

if($my_return_var===false){echo "<b>THERE WAS AN ERROR</b>";}

Мне также нужно сделать подобное, например

grep -l -r "include('path/to/my/file.php')" /home/*/public_html   

а затем вставьте ПЕРЕД

"$my_return_var="

При поиске в Google я обнаружил, что, вероятно, лучше использовать grep, переданный по конвейеру, но я не уверен в синтаксисе.

Кто-нибудь может помочь? Кстати, этот вопрос, наверное, близок, но все же немного выше моей головы. Как заменить текстовую строку в нескольких файлах в Linux

Первым делом: сделайте резервную копию!

Второе: сделайте резервную копию!

Поскольку я знаю Perl намного лучше, чем python, я бы использовал решение perl.

Помните, что "\ n" - это новая строка в perl, поэтому что-то вроде:

grep -l -r "calls the myfunc() function" /home/*/public_html |xargs perl -pi -e 's/(calls the myfunc() function;)/$1\n if($my_return_var===false){echo "<b>THERE WAS AN ERROR</b>";}/'

Я, очевидно, не тестировал это, и это способ сделать это методом грубой силы (и предполагает множество вещей, например, grep не возвращает имена файлов с пробелами в них и так далее). Если ваши шаблоны поиска / замены содержат "/", вы можете использовать альтернативный разделитель для вашего шаблона, например, s?(calls the myfunc() function;)?$1\n if($my_return_var===false){echo "<b>THERE WAS AN ERROR</b>";?'

sed может делать вставки и добавления, когда видит шаблон:

grep -l -r "calls the myfunc() function" /home/*/public_html |
xargs sed -i '/calls the myfunc() function/a\
if($my_return_var===false){echo "<b>THERE WAS AN ERROR</b>";}
'

grep -l -r "include('path/to/my/file.php')" /home/*/public_html |
xargs sed -i "/include('path\\/to\\/my\\/file.php')"'/i\
"$my_return_var="
'