Estrarre gli indirizzi e-mail da un file di testo

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