Precisa de script de shell para transformar um CSV em formato httpd do Apache

3

Precisa de alguns apontamentos corretos no script para buscar e regex ou sed.

O Site24x7 fornece um URL com uma lista de CSV de seus IPs de origem usados para monitoramento. (Eles também fornecem outros formatos, CSV parece o menos confuso como sua estrutura deixa muito a desejar. link )

Assim:

Country,City,IP Address External
Australia,Sydney,"101.0.67.53"
Australia,Melbourne,"125.214.65.59"
Belgium,Brussels,"87.238.165.164"
Brazil,São Paulo,"200.170.83.170"
Brazil,Rio de Janeiro,"201.20.20.237"
Canada,Toronto,"208.69.56.166,
208.69.56.171,
208.69.56.172 "
Canada,Montreal,"199.204.45.153,
199.204.45.154,
199.204.45.155,
199.204.45.156"

Eu preciso salvá-lo como um arquivo de inclusão de permissão no apache. Assim:

Allow from \
72.5.230.111 \
72.5.230.65 \
72.5.230.84
    
por 8None1 09.02.2012 / 19:14

2 respostas

1
#!/bin/bash

webpage="https://www.site24x7.com/multi-location-web-site-monitoring.html"
csv=$(curl -s "$webpage" | grep 'title="CSV"' | \
    sed 's/^.*href="\(http[^ ]*\)".*$//')

echo -e "Allow from \"
curl -s "$csv" | egrep -o '[0-9.]{7,15}' | paste -s | sed 's/\t/ \\n/g'
    
por 09.02.2012 / 22:19
1

Rápida e suja e não muito robusta sed(1) one-liner:

echo 'Country,City,IP Address External
Australia,Sydney,"101.0.67.53"
Australia,Melbourne,"125.214.65.59"
Belgium,Brussels,"87.238.165.164"
Brazil,São Paulo,"200.170.83.170"
Brazil,Rio de Janeiro,"201.20.20.237"
Canada,Toronto,"208.69.56.166,
208.69.56.171,
208.69.56.172 "
Canada,Montreal,"199.204.45.153,
199.204.45.154,
199.204.45.155,
199.204.45.156"' | 
    sed -e 1d -e 's/"$//' -e 's/^[^"]*"/Allow from /' -e 's/,$/ \/'

Saída:

Allow from 101.0.67.53
Allow from 125.214.65.59
Allow from 87.238.165.164
Allow from 200.170.83.170
Allow from 201.20.20.237
Allow from 208.69.56.166 \
208.69.56.171 \
208.69.56.172 
Allow from 199.204.45.153 \
199.204.45.154 \
199.204.45.155 \
199.204.45.156

Suposições:

  • Cada grupo de endereços IP é cercado pelo caractere de aspas duplas ( " )
  • O caractere " não pode ocorrer em nenhum outro lugar, exceto para delimitar grupos de IPs.
  • Uma vírgula ( , ) no final de uma linha significa que vários endereços IP continuam na próxima linha.
por 09.02.2012 / 19:39