Pode haver uma maneira de fazer isso nativamente em sed , mas aqui estão algumas outras opções:
-
grepgrep -vFf badmails.txt my_email_list.txt > tempfile && mv tempfile my_email_list.txtAqui, você está dando a
grepuma 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.txtIsso 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{$_})) -
sede shell:while read badmail; do sed -i sed -i "/$badmail/d" my_email_list.txt ; done < badmails.txtou 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