Bir dosyadaki tüm e-posta adreslerinin bir listesini almam gerekiyor.
Kullanmaya çalışıyordum
grep @ filename
ama bu bütün çizgiyi döndürür.
Yine de, tüm satırı değil, sadece e-posta adresini döndürmeyi öğrenebilir miyim?
Bir dosyadaki tüm e-posta adreslerinin bir listesini almam gerekiyor.
Kullanmaya çalışıyordum
grep @ filename
ama bu bütün çizgiyi döndürür.
Yine de, tüm satırı değil, sadece e-posta adresini döndürmeyi öğrenebilir miyim?
Yanıtlar:
Bu dosyanın formatına bağlı olacaktır. Örneğin, dosya diyelim ki
email@example.com istemediğiniz şeyler email2@example.com istemediğiniz daha fazla şey email3@example.com ve daha fazlası
o
awk '/@/{print $1}'
zaman bariz cevap gibi görünüyor.
Sahip olduğunuz şey değilse, dosya formatına bir örnek gönderin.
Herhangi bir geçerli e-posta adresini doğru şekilde eşleştirmenin derin bir sihir olduğunu unutmayın, bu nedenle yanlış pozitif veya negatif olmayan her şeyi gerçekten yakalamak istiyorsanız, başka birinin yazdığı bir regex kullanmanız gerekir. Ancak grep
, Yeterince İyi olan bir hızlı arıyorsanız , yalnızca eşleşen metni -o
gösteren seçeneğe göz atın .
$ grep -Po '\S+@\S+\.\w+' yourfile.txt
Bu, bazı basit e-posta adreslerini ve geçerli e-posta adresleri olmayan bazı şeyleri ("@@@@. A" gibi) yakalayacaktır. Regex'inizi uygun şekilde ayarlayın. Örneğin, bu daha kısıtlayıcı:
$ grep -Po '[\w+.]+@[\w.]+\.\w+' yourfile.txt
@ rbright bu çözüm iş gibi görünüyor. "-o" seçeneği ne eksikti! Ama yanıtını almadan önce bir php betiği yazdım.
$ 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);
}
Bu hızlı ve kirli ama durumumda çok düşük bir e-posta adresinde olmayan bir @ olana kadar bekletecek