заменить URL с помощью сценария оболочки - PullRequest
0 голосов
/ 13 октября 2011

Я получаю ошибку ниже, когда пытаюсь заменить один URL? Какой эффективный способ заменить URL во всех файлах в заданном каталоге.

sed: -e expression #1, char 62: unknown option to `s'

find . -name '*' | xargs sed -i 's/old_url/new_url/g' не работает

Ответы [ 3 ]

9 голосов
/ 13 октября 2011

Основная проблема, вероятно, в том, что вы указываете что-то вроде

s/http://example.com/ick/poo/http://example.net/also/not/

, который не является допустимым sed или perl сценарием и, очевидно, весьма неоднозначен. Используйте альтернативный разделитель, которого нет ни в регулярном выражении, ни в замене; популярный выбор!

s!http://example.com/ick/poo!http://example.net/also/not!

, который действителен как sed, так и perl.

Редактировать Престижность @TLP для диагностики этого в комментарии. Я удалю этот ответ, если вы отправите аналогичный.

2 голосов
/ 13 октября 2011

Вот способ сделать это на Perl.

cd directory
perl -pi -e 's!old_url!new_url!g;' *
1 голос
/ 13 октября 2011

Или используйте find как в исходном вопросе:

find . -type f -exec perl -pi -e 's{old_url}{new_url}g' {} +

И если Perl говорит вам «нет такого файла или каталога», это, вероятно, потому, что вы случайно пропустили -e

РЕДАКТИРОВАТЬ: изменено s///g с на s{}{}g, так как, как указал TLP, вы работаете с URL-адресами.

РЕДАКТИРОВАТЬ: изменено \; на + по предложению ikegami.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...