Corrigindo a expressão sed

Corrigindo a expressão sed

Estou usando arquivos "hosts" de diferentes fontes e para desbloquear alguns sites utilizo o seguinte código SED:

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

Resultado:

Coloca # na frente de

0.0.0.0 internet.com

mas também

0.0.0.0 internet.com.site

Eu preciso consertar isso.

Responder1

Se você quiser apenas corresponder linhas completas, especifique linhas completas:

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

O ^meio começa off-line, como você já usa no padrão de busca pela substituição.

O $meio fim da linha.

Portanto, ^0.0.0.0 internet.com$corresponderá apenas a uma linha que é exatamente 0.0.0.0 internet.com, não a uma linha que a contenha apenas como uma substring.

Responder2

Aqui está o que eu uso. Ele também lida com entradas que contêm aliases

$ 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

Obviamente, poderia ser facilmente melhorado para lidar com vários espaços em branco, se necessário.

informação relacionada