Я выполнил команду:
sed 's/http:\/\//www/' filename
В выводе эта команда не заменяла «http: //» на «www», почему?
и как изменить разделитель в команде sed
?
Вашей исходной команде хорошо предоставляют, Вы хотите заменить только первым вхождением http://
из строки с www
:
$ cat file.txt
foo http:// bar http:// spam
egg http:// test http://
$ sed 's/http:\/\//www/' file.txt
foo www bar http:// spam
egg www test http://
Теперь, поскольку Вы хотите заменить все случаи http://
с www
, просто добавьте модификатор g
в конце:
$ sed 's/http:\/\//www/g' file.txt
foo www bar www spam
egg www test www
Если Вы хотите установить символ кроме /
как разделитель, можно выбрать символ, который не имеет никакого особого значения к sed
и легче реализовать в тестовом сценарии, например, подчеркивании (_
) будет хороший выбор в этом случае:
$ sed 's_http://_www_g' file.txt
foo www bar www spam
egg www test www
Если Вы хотите изменить исходный файл с измененным содержанием, Вам нужно -i
опция отредактировать файл на месте:
$ sed -i 's_http://_www_g' file.txt
Если Вы хотите взять резервное копирование исходного файла одновременно:
$ sed -i.bak 's_http://_www_g' file.txt
После этой операции исходный файл будет сохранен как file.txt.bak
и измененный файл как file.txt
.
Это на самом деле не заменит содержание существующего файла, необходимо будет перенаправить вывод в файл.
sed 's/http:\/\//www/' filename > filename.new
или при помощи-i опции,
sed -i.bak 's/http:\/\//www/' filename
Это сделает копию с .bak расширением файла, затем перезапишет оригинал с выводом эти sed
команда.
Также, Который также оставит Вас без .
между доменом, мог бы хотеть отбросить .
после www.
РЕДАКТИРОВАНИЕ: Что касается вопроса о разделителе, проверьте это. Примеры даны,
От: using-different-delimiters-in-sed
В основном, sed берет то, что следует за "s" как за разделителем.
sed 's_/a/b/c/_/d/e/f/_'
В этом примере _
разделитель.