Veja as opções -F
(sequência fixa, em oposição à expressão regular) e -x
(exata: coincide com a linha inteira).
grep -Fx user1@example.com text_file
seria o equivalente a:
grep '^user1@example\.com$' text_file
(lembre-se de que .
é um operador de expressão regular que corresponde a qualquer caractere).
Use a -q
opção se você quiser apenas verificar se existe essa linha:
grep -Fxq user1@example.com 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
iniciado -
.
Se o arquivo estiver classificado (no seu local atual, preferencialmente C
), você poderá acelerar as coisas usando, em comm
vez de grep
:
printf '%s\n' user1@example.com | comm -12 - text_file
A vantagem se tornará mais óbvia quando você tiver vários endereços de email 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