Вы можете сделать все это с помощью awk с помощью одной команды, если у вас не слишком много файлов для обработки в командной строке:
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
для моей версии gawk
Мне нужен был --posix
, чтобы фигурные скобки работали правильно в регулярном выражении.
Как это работает
Каждый раз при запуске нового файла FNR
будет 1, поскольку это первая запись в файле, поэтому мы получим имя файла из встроенной FILENAME
, удалите часть _firewall_rule
и напечатайте то, что осталось, с пустой строкой
. Затем в любой строке, которая выглядит примерно как IPv4-адрес, мы напечатаем эту строку с дополнительной новой строкой.
Если вам не нужны лишние пустые строки между всеми IP-адресами и именами и т. Д., Вы можете удалить части \ n
печати и фактически упростить часть шаблона следующим образом:
awk --posix 'FNR==1 {f=FILENAME; sub("_firewall_rule", "", f); print f} /([0-9]{1,3}\.){3}[0-9]{1,3}/ ' *_firewall_rule