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 -oscansiona 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;sortordina i risultati ottenuti da grep;uniq -ifiltra 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