Pode haver uma maneira de fazer isso nativamente em sed
, mas aqui estão algumas outras opções:
-
grep
grep -vFf badmails.txt my_email_list.txt > tempfile && mv tempfile my_email_list.txt
Aqui, você está dando a
grep
uma lista de padrões (-f
) para pesquisar, dizendo para tratá-los como strings simples (-F
) e perguntando por aquelas linhas que não (-v
) corresponde a qualquer um deles. Finalmente, você redireciona a saída para um arquivo temporário e renomeia o arquivo para substituir o original. -
Perl
perl -i -e 'open($f,"badmails.txt"); map{$k{$_}++}<$f>; while(<>){print unless defined($k{$_})}' my_email_list.txt
Isso abre
badmails.txt
, salva cada linha como a chave para um hash e é executada por cada linha demy_email_list.txt
(while(<>){}
) e imprime a mesma, a menos que a mesma linha (email) estivesse presente embadmails.txt
, ou seja, a menos que o valor correspondente seja definido no hash (print unless defined($k{$_})
) -
sed
e shell:while read badmail; do sed -i sed -i "/$badmail/d" my_email_list.txt ; done < badmails.txt
ou use o shell para criar a lista de e-mails que você deseja excluir, por exemplo,
[email protected]\|[email protected]
e passa isso parased
:bad=$(while read b; do printf "%s\|" "$b"; done < badmails.txt| sed 's/\|$//') sed -i "/$bad/d" my_email_list.txt