2013-04-30 4 views
0

Каков наилучший способ получить комбинации [email protected] из большого набора файлов?Удаление адресов электронной почты из произвольного файла

Я предполагаю, что sed/awk может это сделать, но я не очень хорошо знаком с регулярным выражением.

У нас есть файл т.е. Staff_data.txt, что дома больше, чем просто электронная почта, и хотели бы лишить остальную часть данных, и собирать только адреса электронной почты (например, [email protected])

Я понял, что самый простой способ - через sed/awk в терминале, но, видя, насколько сложным может быть regexp, я был бы признателен за некоторые рекомендации.

Спасибо.

+0

Просьба указать образец вашего файла. – Aquillo

ответ

0

Вы хотите grep здесь не sed или awk. Например, чтобы отобразить все письма из домена south.com:

grep -o '[^ ]*@south\.com ' file 
+0

Вам нужно будет привязать это и избежать метахара RE "." или он будет соответствовать «john @ south com», если в файле появится текст «john @ south common drive», и он не сможет найти адреса «.net» и т. д., и он найдет еще много ложных сообщений, позитивы. –

+0

В очень расплывчатом вопросе я не вижу ссылки на какие-либо адреса .net, кроме того, я дал ответ на «электронные письма с сайта south.com». Ладно, мне следовало избежать периода. Помните, что вопрос касается произвольных файлов, поэтому «идеальный» ответ недостижим, это реальный подход. –

0

Вот несколько неловко, но, видимо, работает скрипт я написал несколько лет назад, чтобы сделать эту работу:

# Get rid of any Message-Id line like this: 
# Message-ID: <[email protected]> 
# 
# Change any character that can't be in an email address to a space. 
# 
# Print just the character strings that look like email addresses. 
# 
# Drop anything with multple "@"s and change any domain names (i.e. 
# the part after the "@") to all lower case as those are not case-sensitive. 
# 
# If we have a local mail box part (i.e. the part before the "@") that's 
# a mix of upper/lower and another that's all lower, keep them both. Ditto 
# for multiple versions of mixed case since we don't know which is correct. 
# 
# Sort uniquely. 

cat "[email protected]" | 
awk '!/^Message-ID:/' | 
awk '{gsub(/[^[email protected][:alnum:]]+/," ")}1' | 
awk '{for (i=1;i<=NF;i++) if ($i ~ /[email protected]+[.][[:alpha:]]+$/) print $i}' | 
awk ' 
    BEGIN { FS=OFS="@" } 
    NF != 2 { printf "Badly formatted %s skipped.\n",$0 | "cat>&2"; next } 
    { $2=tolower($2); print } 
' | 
tr '[A-Z]' '[a-z]' | 
sort -u 

Это не красиво, но это кажется надежным.

+0

О, Эд, ты был пьян !? –

+1

Я был молод и глуп. Теперь я старый и ленивый. Как ни странно, я не помню промежуточный промежуток времени. –

Смежные вопросы