Я использую файлы «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
Очевидно, что при необходимости его можно легко улучшить для обработки множественных пробелов.