справа нужен сценарий / команда, в которой будут перечислены все файлы .php, в которых есть шаблон / строка.
Он должен смотреть на текущий каталог и все подкаталоги.
Будет еще лучше, если он покажет номер строки примерно так:
my new command
./www/index.php Line 12
./www/lib/config.php Line 123
Также можно ли выполнить поиск и замену строки в каждом файле с этим шаблоном?
grep
может сделать это самостоятельно:
grep -rn --include='*.php' "pattern" .
найти . -name '* .php' -print0 | xargs -0 grep -n "шаблон"
Я думаю, что следующее будет выполнять поиск и замену, но сначала убедитесь, что вы проверили это, потому что я этого не делал :-)
find . -type f -name '*.php' -print0 | xargs -0 sed -i '.bak' -e 's/foo/bar/g'
Это создаст резервную копию каждого файла перед его редактированием, создав файлы filename.php.bak, и обновит временные метки для всех файлов. Он заменяет «foo» на «bar». Это также должно быть безопасно для имен файлов с пробелами.
find . -name '*.php' |xargs -I{} perl -i.bak -pe 's/pattern/replacement/' {}
Это находит каждый файл php. Затем Xargs выполняет команду для каждого ввода на STDIN, передавая значение как {}
. Затем Perl читает файл и переименовывает его с .bak
расширение и выполняет выражение Perl в каждой строке файла.
Разве это не заменит узор?
найти . -name "* .php" -exec sed -i ".bak" 's / pattern / replace / g' {} \;
Хотя очень опасно! Убедитесь, что узор уникален. :-)
Используйте подтверждение, лучше чем grep.
Преимущества (подробнее см. Топ-10 причин использовать ack вместо grep):
Для операций замены вы можете использовать ack в сочетании с perl или sed.