Arreglando la expresión sed

Arreglando la expresión sed

Estoy usando archivos "hosts" de diferentes fuentes y para desbloquear algunos sitios uso el siguiente código SED:

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

Resultado:

Pone # delante de

0.0.0.0 internet.com

pero también

0.0.0.0 internet.com.site

Tengo que arreglarlo.

Respuesta1

Si solo desea hacer coincidir líneas completas, especifique líneas completas:

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

Los ^medios comienzan sin conexión, como ya usa en el patrón de búsqueda para el reemplazo.

El $medio final de la línea.

Por lo tanto, ^0.0.0.0 internet.com$solo coincidirá con una línea que sea exactamente 0.0.0.0 internet.com, no con una línea que solo la contenga como una subcadena.

Respuesta2

Esto es lo que uso. También maneja entradas que contienen alias.

$ 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, podría mejorarse fácilmente para manejar múltiples espacios en blanco si fuera necesario.

información relacionada