Мне нужно получить список всех адресов электронной почты из файла.
Я пытался использовать
grep @ filename
но это возвращает всю строку.
Могу ли я в любом случае заставить его вернуть только адрес электронной почты, а не всю строку?
Мне нужно получить список всех адресов электронной почты из файла.
Я пытался использовать
grep @ filename
но это возвращает всю строку.
Могу ли я в любом случае заставить его вернуть только адрес электронной почты, а не всю строку?
Это будет зависеть от формата файла. Например, допустим, файл имеет
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}'
может показаться очевидным ответом.
Опубликовать пример формата файла, если это не то, что у вас есть.
Обратите внимание, что правильное сопоставление с любым действительным адресом электронной почты является большой магией, поэтому, если вы действительно хотите поймать все без ложных или отрицательных результатов, вы должны использовать регулярное выражение, написанное кем-то другим. Но если вы просто ищете быстрый grep
который достаточно хорош, проверьте опцию -o
которая покажет только соответствующий текст.
$ grep -Po '\S+@\S+\.\w+' yourfile.txt
Это поймает несколько простых адресов электронной почты, а также некоторые вещи, которые не являются действительными адресами электронной почты (например, "@@@@. A"). Отрегулируйте свое регулярное выражение соответствующим образом. Например, этот является более ограничительным:
$ grep -Po '[\w+.]+@[\w.]+\.\w+' yourfile.txt
@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);
}
Это быстро и грязно, но это будет продолжаться до тех пор, пока не будет @, которого нет в адресе электронной почты, что очень маловероятно в моей ситуации