Voir les options -F(chaîne fixe, par opposition à l'expression régulière) et -x(exacte: correspondre à toute la ligne).
grep -Fx user1@example.com text_file
serait l'équivalent de:
grep '^user1@example\.com$' text_file
(rappelez-vous que .c'est un opérateur d'expression régulière qui correspond à n'importe quel caractère).
Utilisez l' -qoption si vous souhaitez uniquement vérifier s'il existe une telle ligne:
grep -Fxq user1@example.com text_file &&
echo yes, that address is in that file.
Si la ligne à rechercher et le nom de fichier sont variables:
grep -Fxqe "$email" < "$file"
Ou
grep -Fxq -- "$email" < "$file"
Tu ne veux pas:
grep -Fxq "$email" "$file"
car cela causerait des problèmes si $emailou au $filedébut -.
Si le fichier est trié (dans vos paramètres régionaux actuels, de préférence C), vous pouvez éventuellement accélérer les choses en utilisant commau lieu de grep:
printf '%s\n' user1@example.com | comm -12 - text_file
L'avantage deviendra plus évident lorsque vous aurez plusieurs adresses e-mail à vérifier (par exemple dans un autre fichier trié):
comm -12 text_file emails_to_check
serait plus rapide que:
grep -Fxf emails_to_check text_file