2013-06-05 4 views
-1

Je veux extraire toutes les adresses e-mail du fichier csv. comment faire cette action. Par ailleurs, l'emplacement de l'e-mail n'est pas organisé par colonne ou par ligne.extrait l'adresse e-mail du fichier csv

en fait il n'y a pas de format régulier, mais je vous donne un exemple

"bla bla bla bla Website: www.mysite.com ; Email: [email protected]";usa; 

si la question est de savoir comment extraire l'adresse e-mail de cette phrase?

+0

Je ne comprends pas, les fichiers csv ont tendance à avoir des "colonnes" ... Vous voulez donner des exemples de données? – Mithrandir

+0

Donc, vous voulez extraire toutes les chaînes d'un fichier, où les chaînes sont des adresses e-mail valides? S'il vous plaît fournir un exemple – cmh

+0

difficile de donner des conseils sans voir quelques exemples de fichiers d'entrée. –

Répondre

5

merci pour tout; J'ai trouvé la bonne réponse pour ma question, il est:

grep -E -o "\b[a-zA-Z0-9.-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" file.csv | sort -u > email_list 
+0

"sort -u": utilisé pour éviter d'écrire des e-mails en double dans le fichier email_list "> email_list": le résultat affiché sera écrit au fichier texte de la liste email_list –

1

S'il vous plaît ajuster l'expression régulière si nécessaire (\[email protected]\S+ probablement trop simple):

grep -o -P '\[email protected]\S+' input.csv 

De man grep:

-o, --only-matching 
     Print only the matched (non-empty) parts of a matching line, 
     with each such part on a separate output line. 
-P, --perl-regexp 
     Interpret PATTERN as a Perl regular expression (PCRE, see below). 
     This is highly experimental and grep -P may warn of unimplemented features. 

Pour trier et sauter les doublons:

grep -o -P '\[email protected]\S+' input.csv | sort -u 
0

extrait email adsress du dossier complet du fichier csv; juste en utilisant perl

cat *.csv > all.csv 
perl -wne'while(/[\w\.\-][email protected][\w\.\-]+\w+/g){print "$&\n"}' all.csv | sort -u > output.txt