Veja as opções -F (string fixa, em oposição à expressão regular) e -x (exata: corresponde à linha inteira).
grep -Fx [email protected] text_file
seria o equivalente de:
grep '^user1@example\.com$' text_file
(lembre-se que . é um operador de expressão regular que corresponde a qualquer caractere).
Use a opção -q se você quiser apenas verificar se existe essa linha:
grep -Fxq [email protected] text_file &&
echo yes, that address is in that file.
Se a linha a pesquisar e o nome do arquivo forem variáveis:
grep -Fxqe "$email" < "$file"
Ou
grep -Fxq -- "$email" < "$file"
Você não quer:
grep -Fxq "$email" "$file"
pois isso causaria problemas se $email ou $file começassem com - .
Se o arquivo estiver classificado (na sua localidade atual, preferencialmente C ), você poderá acelerar as coisas usando comm em vez de grep :
printf '%s\n' [email protected] | comm -12 - text_file
A vantagem ficará mais óbvia quando você tiver vários endereços de e-mail para verificar (por exemplo, em outro arquivo classificado):
comm -12 text_file emails_to_check
seria mais rápido que:
grep -Fxf emails_to_check text_file