Исправление выражения sed

Исправление выражения sed

Я использую файлы «hosts» из разных источников и для разблокировки некоторых сайтов использую следующий код SED:

sed -i '/0.0.0.0 internet.com/s/^/#/g' /tmp/hosts

Результат:

Он ставит # перед

0.0.0.0 internet.com

но и

0.0.0.0 internet.com.site

Мне нужно это исправить.

решение1

Если вы хотите сопоставить только полные строки, укажите полные строки:

sed -i '/^0.0.0.0 internet.com$/s/^/#/g' /tmp/hosts

Означает ^начало строки, как вы уже использовали в шаблоне поиска для замены.

Означает $конец строки.

Поэтому ^0.0.0.0 internet.com$будет соответствовать только строке, которая содержит его в точности 0.0.0.0 internet.com, а не строке, которая содержит его только как подстроку.

решение2

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

$ cat -vet hosts
0.0.0.0 internet.com internet$
0.0.0.0 internet.com^Iinternet$
0.0.0.0 internet.com$
0.0.0.0 internet.com.site$

$ sed  's/^0.0.0.0 internet.com\( \|\t\|$\)/# &/' hosts
# 0.0.0.0 internet.com internet
# 0.0.0.0 internet.com  internet
# 0.0.0.0 internet.com
0.0.0.0 internet.com.site

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

Связанный контент