Tengo el siguiente email.txt con:
[email protected]
[email protected]
[email protected];es
[email protected]
[email protected]
@pepito.com
Y un comando sed para obtener
sed -n -r '/\w+@\w+\.\w+((\.\w+)*)?/p' emails.txt
[email protected]
[email protected]
Pero sigue mostrando correos electrónicos con más de un .com.
No quiero estos correos electrónicos:
[email protected]
[email protected];es
[email protected]
@pepito.com
Estoy atrapado aquí y no tengo idea de cómo conseguirlo.
Respuesta1
Con sed
, podrías hacer:
$ sed -nr '/^[^@]+@[^.]+\.com\s*$/p' file
[email protected]
[email protected]
La expresión regular busca uno o más @
caracteres que no sean al principio de la línea, luego un @
, luego uno o más .
caracteres que no sean seguidos de .com
y luego 0 o más espacios en blanco.
Otras opciones:
perla
perl -ne 'print if /^[^@]+@[^.]+\.com\s*$/' file
ÑU
grep
grep -P '^[^@]+@[^.]+\.com\s*$' file
POSIX
grep
grep -E '^[^@]+@[^.]+\.com\s*$' file
awk
awk '$0~/^[^@]+@[^.]+\.com\s*$/' file
Respuesta2
Yo usaría algo como esto:
sed -n -r '/\w+@\w+\.com$/p' emails.txt
[email protected]
[email protected]
Recuperará todos los correos electrónicos en formato[email protected]
En caso de que necesites algo más "universal" y no solo .com
sino también .fr
puedes .uk
usar:
sed -n -r '/\w+@\w+\.\w+$/p' emails.txt
Esto recuperará cada correo electrónico en formato[email protected]
Respuesta3
La expresión ((\.\w+)*)?
coincide con secuencias adicionales de la forma .xyz
después del primer dominio. Si quieres coincidirsoloesas direcciones con un solo dominio, entonces puede hacer cumplir eso reemplazándolo con $
o (de manera más sólida)\s*$
sed -n -r '/\w+@\w+\.\w+\s*$/p' emails.txt
para exigir que no haya nada (excepto posiblemente espacios en blanco) entre el primer dominio y el final de la línea.