Замените конкретный текст во всех файлах, используя команду командной строки
У меня есть переименованный js файл, который я должен вызывать на каждой из моих php-страниц. Теперь я хочу заменить это старое имя новым, используя оболочку.
что я могу использовать: -
sed -i ’s/old/new/g’ *
но это приводит к следующей ошибке: -
sed: -e expression #1, char 1: unknown command:
теперь как я могу сделать эту замену?
Ответы
Ответ 1
Есть, вероятно, менее подробные решения, но здесь мы идем:
for i in *; do sed -i 's/old/new/g' "$i"; done
Помните, что он будет работать только на текущем уровне файловой системы, файлы в подкаталогах не будут изменены. Кроме того, вы можете заменить * на *.php или сделать резервные копии (передать аргумент после -i, и он сделает резервную копию с данным расширением).
Ответ 2
sed -i.bak 's/old/new/g' *.php
сделать это рекурсивно
find /path -type f -iname '*.php' -exec sed -i.bak 's/old/new/' "{}" +;
Ответ 3
Вы используете апострофы Unicode (RIGHT SINGLE QUOTATION MARK - U2019) вместо ASCII (0x27), апострофы вокруг вашего аргумента команды sed
.
Ответ 4
perl -pi -e 's/old/new/g' *.php
Ответ 5
этот очень простой, без цикла или цикла, заботиться о любом количестве или вложенных каталогах
grep -rl oldText [folderName-optional] | xargs sed -i s/oldText/newText/g
Ответ 6
Попробуйте следующее:
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