Vedi le opzioni -F(stringa fissa, anziché espressione regolare) e -x(esatto: abbina l'intera riga).
grep -Fx user1@example.com text_file
sarebbe l'equivalente di:
grep '^user1@example\.com$' text_file
(ricorda che si .tratta di un operatore di espressioni regolari che corrisponde a qualsiasi carattere).
Utilizzare l' -qopzione se si desidera solo verificare se esiste una tale linea:
grep -Fxq user1@example.com text_file &&
echo yes, that address is in that file.
Se la riga da cercare e il nome del file sono variabili:
grep -Fxqe "$email" < "$file"
O
grep -Fxq -- "$email" < "$file"
Non vuoi:
grep -Fxq "$email" "$file"
in quanto ciò causerebbe problemi se $emailo $fileiniziato con -.
Se il file è ordinato (preferibilmente nella tua lingua corrente C), puoi accelerare le cose usando comminvece di grep:
printf '%s\n' user1@example.com | comm -12 - text_file
Il vantaggio diventerà più evidente quando si hanno più indirizzi e-mail da controllare (ad esempio in un altro file ordinato):
comm -12 text_file emails_to_check
sarebbe più veloce di:
grep -Fxf emails_to_check text_file