Pré-adicionando um ‘.’ a cada nome de domínio em uma lista, mas ignorando endereços IP brutos

2

Estamos iniciando um novo servidor proxy no trabalho e temos uma lista de domínios que devem ser bloqueados; a lista é baixada de um site externo.

Para colocá-los no formato Squid , temos que adicionar um . ao início da linha que atualmente configuramos simplesmente /bin/sed -i 's/^/./' $file

O problema que encontramos é que alguns dos arquivos incluem endereços IP (aos quais não gostaríamos de adicionar um . )

Eu tenho brincado com sed e acho que isso deve funcionar, mas não:

sed '/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/s/^\.//g'

Alguém pode sugerir como posso remover o% principal . dos endereços IP ou até mesmo modificar o primeiro comando para não adicionar o . aos endereços IP?

Aqui está uma lista de nomes de domínio de dados de amostra depois que o . foi adicionado ao início de cada linha:

.216.32.68.172
.216.32.68.173
.216.32.68.188
.216.32.90.27
.216.32.90.28
.216.32.94.117
.21ace.com
.21publish.com
.21wuxia.com
.222z.net
.22dakika.org
.23-net.org
.23zone.de
.244.120.232.72.static.reverse.ltdomains.com
.24hourcafe.biz.ly
    
por Andrew 10.03.2015 / 07:01

1 resposta

2

Você estava muito perto, apenas escape dos caracteres {} .

Isso colocará um . na frente de todos os padrões que não corresponderem a um endereço IP:

sed '/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/! s/^/./g' file

Isso removerá todos os principais . na frente dos endereços IP:

sed '/^.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/ s/^.//g' file2
    
por 10.03.2015 / 07:49