em regexp perl ( grep -P ...
) você pode usar \Q...\E
para proteger meta chars
grep -P "(^|,)\Q$EMAIL\E(,|$)" file.csv
onde:
-
(^|,)
= início do campo -
(,|$)
= fim do campo
Estou escrevendo um script bash que aceita uma lista de arquivos CSV como argumentos e gera endereços de e-mail encontrados apenas no primeiro arquivo. Para fazer isso, para cada registro no primeiro arquivo CSV, eu procuro o campo de endereço de e-mail e leio seu conteúdo em uma variável shell. Então, eu uso grep -iE
com a seguinte expressão regular para procurar o endereço de e-mail encontrado em todos os arquivos restantes, certificando-se de que não é uma subseqüência (por exemplo, [email protected] não é o mesmo que [email protected] ), e permite que seja no início ou no final de um registro:
"^(.*,)?($EMAIL_ADDRESS|\"$EMAIL_ADDRESS\")(,.*)?\$"
Um problema com essa abordagem é que os endereços de e-mail contêm pontos que têm um significado especial em expressões regulares. Minhas perguntas são:
em regexp perl ( grep -P ...
) você pode usar \Q...\E
para proteger meta chars
grep -P "(^|,)\Q$EMAIL\E(,|$)" file.csv
onde:
(^|,)
= início do campo (,|$)
= fim do campo