Removendo linhas no documento de texto que terminam o mesmo

0

Temos um script que faz o download de uma lista de domínios para que nossa caixa de squid bloqueie, mas continuamos recebendo avisos como os seguintes:

2015/03/02 17:08:47| WARNING: You should probably remove '.artnau.com' from the ACL named 'chat_domains'
2015/03/02 17:08:47| WARNING: '.artnau.com' is a subdomain of '.css.artnau.com'
2015/03/02 17:08:47| WARNING: because of this '.css.artnau.com' is ignored to keep splay tree searching predictable
2015/03/02 17:08:47| WARNING: You should probably remove '.artnau.com' from the ACL named 'chat_domains'
2015/03/02 17:08:47| WARNING: '.chatserve.com' is a subdomain of '.eagles.chatserve.com'
2015/03/02 17:08:47| WARNING: because of this '.eagles.chatserve.com' is ignored to keep splay tree searching predictable

Existe alguma maneira de passar pelo arquivo e remover os subdomínios dos domínios existentes na lista?

Então, pegue a primeira linha e verifique se há outras linhas no texto que terminem com esse texto e o remova?

    
por Andrew 03.03.2015 / 03:07

1 resposta

1

Veja como você faria isso em Perl:

$ cat a.txt
.artnau.com
.bar.foo.example.org
.chatserve.com
.css.artnau.com
.eagles.chatserve.com
.example.com
.foo.example.org
$ cat a.txt | perl -ne 'BEGIN { my %h; } $h{$_} = ""; END { foreach (keys %h) { $orig = $_; $_ =~ s/^\..*?\./\./; print $orig if not exists $h{$_} } }' | sort > b.txt
$ cat b.txt 
.artnau.com
.chatserve.com
.example.com
.foo.example.org

O one-liner Perl percorre a.txt e adiciona cada linha a um hash chamado %h . Após cada linha do arquivo ser adicionada, ela passa por todas as chaves do hash, remove a primeira parte do domínio (o primeiro período até o segundo período) e, se a sequência resultante não estiver no hash, imprime. A saída é então canalizada através de sort (você provavelmente pode adivinhar o que isso faz) e salva em b.txt .

    
por 03.03.2015 / 05:16

Tags