Agradecemos antecipadamente por qualquer ideia que você apresentar.
Meu projeto atual consiste em tentar fazer um loop de um arquivo contendo uma lista de milhares de endereços IP por meio do geoiplookup e direcioná-lo ao sed para excluir todas as linhas que não correspondem aos critérios.
A lista é apenas uma lista de endereços IP:
1.2.3.4
5.6.7.8
9.10.11.12
.
.
.
Em seguida, executo geoiplookup ip.ad.dre.ss
como root e obtenho:
[root@system ipset]# geoiplookup 4.2.2.2
GeoIP Country Edition: US, United States
se o IP estiver dentro dos EUA.
Meu objetivo é excluir todas as linhas do arquivo, se o IP deles não estiver nos EUA.
O que tentei não está funcionando:
#!/bin/bash
for ip in $(cat /tmp/iplist.txt); do
geoiplookup $ip | sed '/GeoIP Country Edition: US, United States/!d'
done
Alguma sugestão? Recomendações de outra abordagem seriam muito apreciadas.
@terdon Desculpe não ter atualizado antes, estive ocupado.
Adicionar qualquer um a esta pergunta ou comentário bagunça a formatação do texto. Desculpe, novato no Stack...deixe-me descobrir isso.
OK, atualização.
depois de alterar e executar o primeiro código do @terdon:
#!/bin/bash
while read ip; do
if ! geoiplookup "$ip" | grep -q ': US, United States$'; then
sed -i "/^$ip$/d" /tmp/iplist.txt
fi
done < /tmp/iplist.txt
ele roda sem erros, mas endereços IP não americanos ainda estão na lista.
Eu estava usando o último exemplo com odeclare -a badLines
scripts#geoiplookup 172.168.155.63
GeoIP Country Edition: GB, United Kingdom
scripts#grep 172.168.155.63 /tmp/iplist.txt
172.168.155.63
Assim que eu descobrir como fazer o copiar e colar funcionar corretamente na pergunta, atualizarei.
@Ed Morton Ambos os exemplos produzem o mesmo erro na linha "done", linha 7 em um e linha 9 no outro.
./filter_ips.sh: line 7: syntax error near unexpected token `done'
./filter_ips.sh: line 7: ` done < "${@:--}"'
@Miri B Eles funcionam, mas ainda há endereços IP de fora dos EUA na lista.