как использовать команду sed для поиска строки с помощью & ldquo; / & rdquo; символ в нем и заменить другой строкой?

Я выполнил команду:

sed 's/http:\/\//www/' filename

В выводе эта команда не заменяла «http: //» на «www», почему?

и как изменить разделитель в команде sed?

0
задан 18 April 2015 в 23:55

2 ответа

Вашей исходной команде хорошо предоставляют, Вы хотите заменить только первым вхождением 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.

1
ответ дан 19 April 2015 в 09:55

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

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/_'

В этом примере _ разделитель.

0
ответ дан 19 April 2015 в 09:55

Другие вопросы по тегам:

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