Как я могу сократить адреса электронной почты с sed?

У меня есть следующий emails.txt с:

tsar@gmail.com
c2m_@hotmail.com.es
c72@hotmail.com.es.com;es
m7_@hotmail.es.com
cm_@hotmail.com
@pepito.com 

И sed управляет для получения

sed -n -r '/\w+@\w+\.\w+((\.\w+)*)?/p' emails.txt 

tsar@gmail.com
cm_@hotmail.com 

Но, это продолжает отображать электронную почту больше чем с одним .com

Я не хочу эти электронные письма:

c2m_@hotmail.com.es
c72@hotmail.com.es.com;es
m7_@hotmail.es.com 
@pepito.com 

Я застреваю здесь, и у меня нет подсказки о том, как получить его.

3
задан 14 June 2015 в 12:36

3 ответа

Я использовал бы что-то вроде этого:

sed -n -r '/\w+@\w+\.com$/p' emails.txt

tsar@gmail.com
cm_@hotmail.com

Это получит каждую электронную почту в формате user@xxx.com

В случае, если Вам нужно что-то более "универсальное" а не [только 113], но также и .fr, или .uk можно использовать:

sed -n -r '/\w+@\w+\.\w+$/p' emails.txt

Это получит каждую электронную почту в формате user@xxx.xxx

5
ответ дан 17 November 2019 в 09:10

Выражение ((\.\w+)*)? соответствует дополнительным последовательностям формы .xyz после первого домена. Если Вы хотите соответствовать [только 115] те адреса с единственным доменом, то можно осуществить это путем замены его $ или (более надежно) \s*$

sed -n -r '/\w+@\w+\.\w+\s*$/p' emails.txt

, чтобы потребовать, чтобы не было ничего (кроме возможно пробела) между первым доменом и концом строки.

3
ответ дан 17 November 2019 в 09:10

С sed, Вы могли сделать:

$ sed -nr '/^[^@]+@[^.]+\.com\s*$/p' file
tsar@gmail.com
cm_@hotmail.com

regex ищет один или несколько не -@ символы в начале строки, затем a @, затем один или несколько не -. символы, сопровождаемые .com и затем 0 или больше пробелов.


Другой выбор:

  • Perl

    perl -ne 'print if /^[^@]+@[^.]+\.com\s*$/' file
    
  • GNU grep

    grep -P '^[^@]+@[^.]+\.com\s*$' file
    
  • POSIX grep

    grep -E '^[^@]+@[^.]+\.com\s*$' file
    
  • awk

    awk '$0~/^[^@]+@[^.]+\.com\s*$/' file
    
6
ответ дан 17 November 2019 в 09:10

Другие вопросы по тегам:

Похожие вопросы: