заменить определенный текст во всех файлах, используя однострочную команду оболочки - PullRequest
31 голосов
/ 26 марта 2010

У меня есть переименованный JS-файл, который мне нужно вызывать на каждой из моих страниц PHP. Теперь я хочу заменить это старое имя на новое с помощью оболочки. что я использую это: -

sed -i ’s/old/new/g’ *

но это выдает следующую ошибку: -

sed: -e expression #1, char 1: unknown command:

Теперь, как я могу сделать эту замену?

Ответы [ 9 ]

50 голосов
/ 26 марта 2010
sed -i.bak 's/old/new/g' *.php

сделать это рекурсивно

find /path -type f -iname '*.php' -exec sed -i.bak 's/old/new/' "{}" +;
27 голосов
/ 26 марта 2010

Вероятно, есть менее подробные решения, но здесь мы идем:

for i in *; do sed -i 's/old/new/g' "$i"; done

Имейте в виду, это будет работать только на текущем уровне файловой системы, файлы в подкаталогах не будут изменены. Также вы можете заменить * на * .php или сделать резервные копии (передайте аргумент после -i, и он создаст резервную копию с данным расширением).

9 голосов
/ 26 марта 2010

Вы используете апострофы Юникода (ПРАВОВАЯ ОДНОКВАЖНАЯ КВАРТАЦИЯ - U2019) вместо ASCII (0x27) апострофов вокруг аргумента sed команды.

7 голосов
/ 30 октября 2017

это очень просто, без for или loop, и заботится о любом количестве или вложенных каталогах

grep -rl 'oldText' [folderName-optional] | xargs sed -i 's/oldText/newText/g'

4 голосов
/ 26 марта 2010
perl -pi -e 's/old/new/g' *.php
2 голосов
/ 19 ноября 2018

Я знаю, что я действительно опоздал, но все же:

find . -type f -name "*.php"|xargs sed -i 's/old/new/g'
2 голосов
/ 21 августа 2018

Для полноты предоставим OSX-совместимую версию принятого выше ответа (для ответа на комментарий @jamescampbell)

for i in *.php; do sed -i .orig 's/old/new/g' "$i"; done

Эта команда создает .orig резервных файлов.

0 голосов
/ 11 февраля 2019

Использовать двойные кавычки

sed -i "s/old/new/g" *
0 голосов
/ 26 марта 2010

Попробуйте это:

ls | grep "php" > files.txt
for file in $(cat files.txt); do
    sed 's/catch/send/g' $file > TMPfile.php && mv TMPfile.php $file
done
...