Vea las opciones -F(cadena fija, en lugar de expresión regular) y -x(exacto: coincida con la línea completa).
grep -Fx user1@example.com text_file
sería el equivalente de:
grep '^user1@example\.com$' text_file
(recuerde que .es un operador de expresión regular que coincide con cualquier carácter).
Use la -qopción si solo desea verificar si existe esa línea:
grep -Fxq user1@example.com text_file &&
echo yes, that address is in that file.
Si la línea a buscar y el nombre del archivo son variables:
grep -Fxqe "$email" < "$file"
O
grep -Fxq -- "$email" < "$file"
No quieres:
grep -Fxq "$email" "$file"
ya que ello causar problemas si $emailo $fileempezar con -.
Si el archivo está ordenado (en su localidad actual, preferiblemente C), puede acelerar las cosas usando en commlugar de grep:
printf '%s\n' user1@example.com | comm -12 - text_file
La ventaja será más evidente cuando tenga varias direcciones de correo electrónico para verificar (por ejemplo, en otro archivo ordenado):
comm -12 text_file emails_to_check
sería más rápido que:
grep -Fxf emails_to_check text_file