Подтвердить что ты не робот

Как использовать SED для поиска и замены строк URL с символом "/" в целевых строках?

Я пытаюсь использовать SED через терминал OS X для выполнения поиска и замены.

Представьте, что эта строка заполнена в текстовом файле: http://www.find.com/page

И я хочу заменить его на эту строку: http://www.replace.com/page

У меня проблемы, потому что я не уверен, как правильно убежать или использовать символ "/" в моих строках. Например, если я просто хотел найти "кошку" и заменить на "собаку", я нашел следующую команду, которая отлично работает:

sed -i '' 's/cat/dog/g' file.txt

Есть ли у кого-нибудь идеи о том, как достичь той же функциональности, кроме кошки и собаки, есть строки или URL-адреса, которые содержат символ "/" ? Я пробовал много разных способов избежать символов "/" , но потом кажется, что SED больше не может "найти" строку и не выполняет никаких действий по поиску и замене.

Любая помощь или советы приветствуются.

Спасибо!

4b9b3361

Ответ 1

/ не является разделителем в командах sed, это всего лишь один из возможных. В этом примере вы можете, например, использовать ,, потому что он не конфликтует с вашими строками;

echo 'I think http://www.find.com/page is my favorite' | 
    sed 's,http://www.find.com/page,http://www.replace.com/page,g'

Ответ 2

sed может принимать все, что следует за "s" в качестве разделителя. Поскольку вы работаете с URL, рекомендуется использовать другой разделитель, отличный от /, чтобы не путать sed, когда ваша замена заканчивается и начинается замена.

Однако, сказав, что вы можете определенно использовать /, если хотите. Вам просто нужно избежать буквального /.

Итак, вы можете либо сделать:

sed 's/http:\/\/www.find.com\/page/http:\/\/www.replace.com\/page/g' input_file

или используйте другой разделитель, чтобы не сделать ваш загадочный код более загадочным.

sed 's#http://www.find.com/page#http://www.replace.com/page#g' input_file