замените конкретный текст во всех файлах с помощью однострочной команды оболочки

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

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

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

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

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

34
задан Alsciende 26 March 2010 в 12:53
поделиться

5 ответов

Вероятно, существуют менее подробные решения, но начнем:

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

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

30
ответ дан 27 November 2019 в 16:07
поделиться
perl -pi -e 's/old/new/g' *.php
4
ответ дан 27 November 2019 в 16:07
поделиться

Попробуйте следующее:

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
-3
ответ дан 27 November 2019 в 16:07
поделиться
sed -i.bak 's/old/new/g' *.php

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

find /path -type f -iname '*.php' -exec sed -i.bak 's/old/new/' "{}" +;
50
ответ дан 27 November 2019 в 16:07
поделиться

Вы используете апострофы Unicode (RIGHT SINGLE QUOTATION MARK - U2019) вместо апострофов ASCII (0x27) вокруг аргумента команды sed.

9
ответ дан 27 November 2019 в 16:07
поделиться
Другие вопросы по тегам:

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