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