Как использовать 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 больше не может "найти" строку и не выполняет никаких действий по поиску и замене.
Любая помощь или советы приветствуются.
Спасибо!
Ответы
Ответ 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