Как искать и заменять текст во всех php-файлах в каталоге и в его подкаталогах

Я ищу сценарий оболочки, который рекурсивно проходит все .php файлы в каталоге и выполняет поиск и замену определенного текстового шаблона.

Шаблон поиска довольно длинный (> 5000 символов), поэтому его можно сохранить в другом текстовом файле для удобства. Также он содержит символы косой черты.

редактирование: я думаю, я понял первую часть:

 find . -name "*.php" 

но тогда как я могу найти и заменить в этих файлах?

  • Как создать выход в скрипт python, запущенный при загрузке?
  • Как я могу выполнить некоторые команды в сценарии оболочки с `sudo`, а другие нет?
  • Bash не ищет источник ~ / .bash_profile в OSX
  • Создание системы для сценариев оболочки
  • Как «захватить» соответствующие файлы из файла поиска в bash?
  • Шаблон Regex для замены нескольких значений с помощью sed
  • Как распечатать индекс цикла в файл с помощью awk?
  • Каковы некоторые из наиболее полезных алиасов и сценариев bash?
  • 3 Solutions collect form web for “Как искать и заменять текст во всех php-файлах в каталоге и в его подкаталогах”

    Это можно сделать легко с хорошей комбинацией sed и xargs.

     find . -name "*.php" | xargs -n 1 echo 

    покажет вам силу xargs.

    После этого в файле примера вы можете протестировать регулярное выражение, с заменой inplace (-i) или с помощью резервного копирования (-i.bak). Вы также можете использовать другой символ для замены «/», если у вашего шаблона / замены уже есть один.

    В конце он должен выглядеть так:

     pattern=`cat /path/to/pattern`; replacement=`cat /path/to/replacement` find . -name "*.php" | xargs -n 1 sed -i -e 's|$pattern|$replacement|g' 

    Пытаться:

     find . -name "*.php" -exec sed -i "s/$pattern/$replacement/g" {} \; 

    где pattern – это шаблон для поиска и replacement это текст, который нужно заменить.

    Параметр -i для sed редактирует файлы «на месте». Если вы хотите создать резервную копию файла перед его редактированием, используйте -i'.bak' .

     perl -p -i -e 's/originalString/targetString/g' `find . -name '*' -type f` 
    Linux и Unix - лучшая ОС в мире.