Per estrarre tutti gli indirizzi email contenuti in un file di testo (ad esempio un messaggio email con tutte le intestazioni) è sufficiente l’utilizzo di grep e di altri tool da shell:
$ grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' EMAIL_SAMPLES.TXT | sort | uniq -i
Vediamo in dettaglio come funziona questa pipe:
grep -o
scansiona il file di testo indicato e stampa tutte le stringhe che corrispondo ai criteri specificati dall’espressione regolare;'[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*'
è un’espressione regolare che identifica un indirizzo email;sort
ordina i risultati ottenuti da grep;uniq -i
filtra i risultati in modo che ciascun indirizzo appaia una sola volta.
E’ anche possibile inglobare questo comando in uno shell script:
#!/usr/bin/env bash if [ -f "$1" ]; then grep -o '[[:alnum:]+\.\_\-]*@[[:alnum:]+\.\_\-]*' "$1" | sort | uniq -i else echo "Expected a file at $1, but it doesn't exist." >&2 exit 1 fi
e richiamarlo dal prompt passandogli come parametro il nostro file da analizzare:
$ script.sh EMAIL_SAMPLES.TXT