1 votos

¿Cómo elimino las líneas del primer archivo si coincide con la cadena presente en el segundo archivo en linux?

Considere la posibilidad de que tengo dos archivos de texto.

Primer nombre de Archivo - "Emails.txt" con los siguientes datos:

00iiiiiiii_l@hotmail.com
00rrrrrrrr@hotmail.com
00zzzzz@gmail.com
00eeeeee@gotmail.com
00gggggg@uor.edu
00uuuuuuuu@yahoo.com
00e21_ss@cmail.com
00gggggggg@cmail.com
00zzzzzzzz48@hotmail.com
00aaaaaaa_2020@gotmail.com
jjjjjjjj@gmail.com

Segundo archivo de texto - "Banned.txt" con las siguientes cadenas:

@gotmail.com
@cmail.com
@uor.edu

Cómo eliminar todas las líneas en el 1er archivo de texto "Emails.txt" si coincide con las picaduras de cualquier línea presente en el segundo archivo de texto "Banned.txt"?

La salida deseada del nuevo archivo debe ser:

00iiiiiiii_l@hotmail.com
00rrrrrrrr@hotmail.com
00zzzzz@gmail.com
00uuuuuuuu@yahoo.com
00zzzzzzzz48@hotmail.com
jjjjjjjj@gmail.com

Se puede hacer esto usando SED o awk en Linux? Puede usted por favor, sugiera cómo hacerlo?

1voto

techtonik Puntos 2945

grep -v es suficiente. La flag -f permite hacer exactamente lo que usted desea:

grep -vf Banned.txt Emails.txt

Si quieres hacer algo más complicado fuera de la lista de direcciones prohibidas, por ejemplo, imponer que coincidan con la totalidad del dominio, necesita generar un regex de su Banned archivo:

cat Banned.txt | tr "\n" "|" | sed -e 's,|,$\\|,g' | sed -e 's,\\|$,,'

da la deseada

@gotmail.com$\|@cmail.com$\|@uor.edu$

Entonces:

cat Banned.txt | tr "\n" "|" | sed -e 's,|,$\\\\|,g' | sed -e 's,\\|$,,' | xargs -i grep -v '{}' Emails.txt

(duplicando el número de escapes \ como están siendo evaluados cuando se va a través de la xargs). Esto coincidirá con y quite me@uor.edu , pero no por ejemplo me@uor.education.gov.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: