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
grep
pueda 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
g
es 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.
g
es 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'