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

Попытайтесь иметь

MAJOR=4
MINOR=0
STATE="beta"
POINT=9
VERSION=$MAJOR.$MINOR$STATE$POINT
NEXT_VERSION=$MAJOR.$MINOR$STATE$((POINT +1 ))

echo "Next version is $NEXT_VERSION"
# other release stuff here 

Действительно хотите, чтобы это было сценарием самоперезаписи? Я предложил бы что-то как

tempfile=$( tempfile -d . )
sed -re "s/POINT=[0-9]+/POINT=$(( ++POINT ))/" $0 > $tempfile
chmod +x $tempfile
mv $tempfile $0
4
17.01.2012, 11:54
3 ответа

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

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

покажет Вам питание xargs.

После этого, на файле примера, можно протестировать regexp с оперативным изменением (-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'
5
27.01.2020, 20:48
  • 1
    хорошо спасибо! тот же вопрос здесь: как я загрузил бы шаблон поиска из файла? –  clamp 17.01.2012, 11:52
  • 2
    что-то вроде этого, возможно? шаблон =cat /path/to/pattern; замена =cat /path/to/replacement; найти. - называют "*.php" | xargs-n 1 sed-i-e "s/$pattern/$replacement/g" спасибо –  Coren 17.01.2012, 12:04
  • 3
    ! единственная остающаяся проблема состоит в том, что шаблон содержит наклонные черты вправо, которые, кажется, проблематичны в regexp –  clamp 17.01.2012, 12:06
  • 4
    , можно использовать другой символ, чем '/' в sed. Например, sed -i -e "|$pattern|$replacement|g работы хорошо спасибо –  Coren 17.01.2012, 12:15
  • 5
    ! теперь это работает без ошибок, но это, кажется, ничего не заменяет. я предполагаю, что шаблон поиска не найден. (хотя это там). шаблон поиска содержит весь вид символов включая вкладки, пробелы, $, <> и т.д. который мог быть проблемой? –  clamp 17.01.2012, 12:22

Попытка:

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

где pattern шаблон должен искать и replacement текст должен заменить его.

-i опция для sed редактирует файлы "на месте". Если Вы хотите создать резервное копирование файла перед редактированием его использовать -i'.bak'.

5
27.01.2020, 20:48
  • 1
    Спасибо!, как я получил бы шаблон и замену из файла? –  clamp 17.01.2012, 11:42
  • 2
    @clamp аргумент sed "s/$(cat /path/to/pattern.txt)/$(cat /path/to/replacement.txt)/g". –  Gilles 'SO- stop being evil' 18.01.2012, 01:39
perl -p -i -e 's/originalString/targetString/g' `find . -name '*' -type f`
0
27.01.2020, 20:48

Теги

Похожие вопросы