Você pode fazer tudo com o awk em um único comando se não tiver muitos arquivos para a linha de comando:
awk --posix 'FNR==1 {f=FILENAME; sub("_firewall_rule", "", f); print f "\n"} /([0-9]{1,3}\.){3}[0-9]{1,3}/ {print $0 "\n"}' *_firewall_rule
para minha versão de gawk
, eu precisava do --posix
para que as chaves funcionassem corretamente na regex.
Como funciona
Sempre que um novo arquivo for iniciado, FNR
será 1, já que é o primeiro registro no arquivo, portanto, obteremos o nome do arquivo da variável FILENAME
incorporada, removeremos a parte _firewall_rule
e imprimiremos o que deixado com uma linha em branco
Em seguida, qualquer linha que se pareça com um endereço IPv4, imprimiremos essa linha com uma nova linha extra.
Se você não quisesse as linhas em branco extras entre todos os IPs e os nomes, você pode remover as \n
partes da impressão e, na verdade, simplificar a parte do padrão da seguinte forma:
awk --posix 'FNR==1 {f=FILENAME; sub("_firewall_rule", "", f); print f} /([0-9]{1,3}\.){3}[0-9]{1,3}/ ' *_firewall_rule