Me gustaría dar una palabra clave, encontrar la línea donde aparece esta palabra clave en un archivo y borrar toda la línea.Bash: busque una palabra clave en un archivo y elimine su línea
Esto es lo que tengo, pero no está funcionando como debiera:
KEYWORD='domain.com'
cat /etc/hosts | grep -v "$KEYWORD" > /etc/hosts
ACTUALIZACIÓN
Esto es lo que funcionó para mí:
sed -i_bak -e '/domain\.com/d' /etc/hosts
Sin embargo, como tenía dos líneas con "domain.com", ¿hay alguna manera de decirle a sed que borre solo la línea donde está exactamente la clave? ord "domain.com" aparece
Este es el contenido original de/etc/hosts:
127.0.0.1 localhost localhost.localdomain
222.111.22.222 hvn.domain.com
222.111.22.222 domain.com
Así es como terminan después del comando sed -i_bak -e '/domain\.com/d' /etc/hosts
:
127.0.0.1 localhost localhost.localdomain
intenté pero sed -i_bak -e '/\<namourphoto\.com\.br\>/d' ~/Desktop/hosts
no funcionó
CONCLUSIÓN
Este es el código que se me ocurrió (basado en la ayuda a la gente fina me han dado):
D=domain.com
DOMAIN=`echo "$D" | sed 's/\./\\\\./g'`
sed -i_bak -e "/[\t]$DOMAIN/d" /etc/hosts
Tenga en cuenta que:
I Estoy contando que siempre hay una pestaña antes de que el dominio se borre
Estoy escapando automáticamente de los puntos del nombre de dominio.
Tenga en cuenta también que el punto tiene un significado especial en las expresiones regulares de modo 'domain.com' también coincidirá' domainxcom.net'. Deberías escapar del punto. – duri
¿Debo escapar de puntos incluso cuando estoy entre ''? – Roger
Sí, lo haces. Prueba 'echo abc | grep 'a.c'', la salida será 'abc'. – duri