Tengo un archivo con una lista de correos electrónicos y cada línea tiene un correo electrónico. Quiero eliminar las líneas que contienen la cadena example.com o test.com.
Intenté esto:
sed -i "s/example\.com//ig" file.txt
Pero solo eliminará la cadena example.com, ¿cómo puedo eliminar toda la línea?
Responder
Con GNU sed:
sed "/example\.com/d;/test\.com/d" -i file.txt
eliminará las líneas con example.com y test.com.
De man sed:
d Delete pattern space. Start next cycle.
Comentarios
Responder
POSIXly, puedes usar grep:
grep -Eiv "(example|test)\.com" <in >out
Comentarios
- Tenga cuidado de no utilizar el mismo archivo para entrada y salida o se truncará antes de que
greppueda leerlo.
Responder
Su expresión regular solo coincide con example.com y sed reemplaza solo example.com s con vacío cuerda. Su expresión regular debe coincidir con cualquier línea que contenga example.com o test.com
sed -i "s@.*\(test\|example\)\.com.*@@i" file.txt
Comentarios
- Su la respuesta no elimina las líneas coincidentes; solo los deja en blanco. – Tampoco maneja texto que no distingue entre mayúsculas y minúsculas (según el ejemplo de OP ' s). -. El
ges redundante / sin sentido, porquesed ' s regex es codicioso y por lo tanto el.*inicial y final hará que la primera aparición de una coincidencia de texto coincida con la línea completa. - Gracias por sus comentarios. No he ' t prestado atención a la sensibilidad a mayúsculas y minúsculas.
ges mi costumbre, tienes razón, no es necesario. También pensé que OP quería una línea en blanco. Ahora todo está claro. Gracias
example(otest) seguido de cualquier carácter, luegocom. Ejemploecho 'exampleAcom' | sed '/example.com/d'