Bash: získání e-mailové adresy z řětězce

Bash: získání e-mailové adresy z řětězce
« kdy: 22. 02. 2013, 21:27:23 »
Ahoj,

prosím o rady, jak dostat v bash skriptu e-mailovou adresu z řetězce v proměnné

po celkem dlouhé době jsem se dopracoval že by to mohlo být takto:

Kód: [Vybrat]

TO="To: foo@bar.com"

EMAIL=$( sed '/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/d' <<< $TO )

ale stejně to neunguje

díky za rady
« Poslední změna: 24. 02. 2013, 20:17:18 od Petr Krčmář »


Such

Re:BASH: získání e-mailové adresy z řětězce
« Odpověď #1 kdy: 22. 02. 2013, 21:37:06 »
Stačí to takto?

EMAIL=`awk '{print $2}' <<< $TO`

Re:BASH: získání e-mailové adresy z řětězce
« Odpověď #2 kdy: 22. 02. 2013, 22:02:45 »
Drobná poznámka: pokud to má sloužit k vyzobnutí z mailu, tak to je podstatně složitější (jméno adresáta v lomených uvozovkách, různá kódování,...) a žádným jednoduchým způsobem to nepůjde dostatečně funkčně.

student

Re:BASH: získání e-mailové adresy z řětězce
« Odpověď #3 kdy: 22. 02. 2013, 22:15:54 »
Radsej namiesto sed-u grep -Eo - potom z toho bude nieco ako
Kód: [Vybrat]
grep -Eo '[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}'
Pozor - toto nefunguje vzdy. Napriklad ak ma domena s TLD ako tato http://مثال.آزمایشی priradeny nejaky email, tak to asi nepojde (dlhsia pripona, v nej pomlcky) - je ale pravda, ze to neakceptuje ani toto forum. Naviac mate este v pripone bodku. Aj keby ste nemali, tak je validny email aj napriklad root@[127.0.0.1] - a to, ci sa zatvorky paruju sa uplne lahko v regexpoch nerobi.

Re:BASH: získání e-mailové adresy z řětězce
« Odpověď #4 kdy: 22. 02. 2013, 22:22:25 »
Radsej namiesto sed-u grep -Eo - potom z toho bude nieco ako
Kód: [Vybrat]
grep -Eo '[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}'

super, funguje a řeší to i ten případ, kdy bude emailová adresa v závorkách

díky chlapi!


Re:BASH: získání e-mailové adresy z řětězce
« Odpověď #5 kdy: 22. 02. 2013, 22:29:59 »
Pozor - toto nefunguje vzdy.
Za zavinacem nemusi byt TLD. Muze to byt klidne neco jako prymek@superlab.superfirma.cz

korczis-anonymous

Re:BASH: získání e-mailové adresy z řětězce
« Odpověď #6 kdy: 23. 02. 2013, 00:43:42 »

Re:BASH: získání e-mailové adresy z řětězce
« Odpověď #7 kdy: 23. 02. 2013, 01:03:39 »
Pokud by to melo byt dle RFC822 - http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
Tyvole, tak to je masakr :) A to je pořád ještě bez té diakritiky a podobných vychytávek :)

Zopper

  • *****
  • 657
    • Zobrazit profil
Re:BASH: získání e-mailové adresy z řětězce
« Odpověď #8 kdy: 23. 02. 2013, 14:06:54 »
Radsej namiesto sed-u grep -Eo - potom z toho bude nieco ako
Kód: [Vybrat]
grep -Eo '[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}'

super, funguje a řeší to i ten případ, kdy bude emailová adresa v závorkách

díky chlapi!
A co budete dělat s takovým emailem someone@people.coca-cola? Vlastní TLD se už *dají koupit*... Osobně emailovou adresu testuji jen na přítomnost zavináče ve slově (a nesmí být na prvním ani posledním místě, ale někde uvnitř).