sed -e "$(awk '/^[[:space:]]*(#|$)/ { next } ;
{ print "s/ PROTO="$2" / PROTO="$3" /;" }' \
/etc/protocols)" /path/to/iptables.log
Isso usa awk
para construir um script sed
dos campos 2 e 3 do arquivo /etc/protocols
. Em seguida, ele executa o script sed
em /path/to/iptables.log
. Isso converterá os protocolos numerados ALL no arquivo de log em seus nomes correspondentes.
Se preferir, você pode salvar a saída do script awk
em um arquivo (por exemplo, chamado verbose-proto.sed
e executá-lo com sed -f
(ou editá-lo para adicionar #!/bin/sed -f
como primeira linha e chmod
para torná-lo executável), por exemplo,
$ awk '/^[[:space:]]*(#|$)/ { next } ;
{ print "s/ PROTO="$2" / PROTO="$3" /;" }' \
/etc/protocols > ./verbose-proto.sed
$ printf "%s\n" 1 i '#!/bin/sed -f' . w | ed -s verbose-proto.sed
$ chmod +x ./verbose-proto.sed
$ ./verbose-proto.sed /path/to/iptables.log
Se tudo o que você quiser fazer é alterar esse número de protocolo 2
para IGMP
, é muito mais simples:
sed -e 's/ PROTO=2 / PROTO=IGMP /' /path/to/iptables.log
(o script awk
gera cerca de 50 linhas com a pesquisa regexp e substitui regras como essa - uma para cada protocolo conhecido em /etc/protocols
)