1

Мне нужно получить список всех адресов электронной почты из файла.

Я пытался использовать

grep @ filename

но это возвращает всю строку.

Могу ли я в любом случае заставить его вернуть только адрес электронной почты, а не всю строку?

3 ответа3

1

Это будет зависеть от формата файла. Например, допустим, файл имеет

email@example.com stuff you don't want
email2@example.com more stuff you don't want
email3@example.com and more

тогда awk '/@/{print $1}' может показаться очевидным ответом.

Опубликовать пример формата файла, если это не то, что у вас есть.

1

Обратите внимание, что правильное сопоставление с любым действительным адресом электронной почты является большой магией, поэтому, если вы действительно хотите поймать все без ложных или отрицательных результатов, вы должны использовать регулярное выражение, написанное кем-то другим. Но если вы просто ищете быстрый grep который достаточно хорош, проверьте опцию -o которая покажет только соответствующий текст.

$ grep -Po '\S+@\S+\.\w+' yourfile.txt

Это поймает несколько простых адресов электронной почты, а также некоторые вещи, которые не являются действительными адресами электронной почты (например, "@@@@. A"). Отрегулируйте свое регулярное выражение соответствующим образом. Например, этот является более ограничительным:

$ grep -Po '[\w+.]+@[\w.]+\.\w+' yourfile.txt
0

@rbright это решение, кажется, работает. опция "-o" - это то, чего мне не хватало! Но я закончил тем, что просто написал скрипт php, прежде чем получил ваш ответ.

$ handle = fopen("MYFILE.txt", "r");

if ($handle) {  
    while (!feof($handle)) {
        $buffer = fgets($handle);

        $pieces = explode(" ",  $buffer);
        foreach($pieces as $piece){
            if( strstr($piece, '@' && $piece != " ")){              
           echo $piece;             
            }
        }   
    }
 fclose($handle);
} 

Это быстро и грязно, но это будет продолжаться до тех пор, пока не будет @, которого нет в адресе электронной почты, что очень маловероятно в моей ситуации

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .