Файл cat hosts.cfg
define host {
host_name switchlan
alias switchlan
address 192.168.2.1
icon_image_alt Switch
icon_image base/switch40.gif
statusmap_image base/switch40.gd2
check_command check-host-alive
check_period 24x7
notification_period 24x7
contact_groups +admins,noc-monitor
use generic-switch
}
define host {
host_name localhost
alias localhost
address 127.0.0.1
icon_image_alt Linux
icon_image base/linux40.gif
statusmap_image base/linux40.gd2
check_command check-host-alive
use linux-server
contact_groups +admins
}
В вышеупомянутом мне нужно извлечь IP-адрес и имя хоста хоста, когда значение "use" - "Switch"
Мой текущий подход:
tr '\n' '\t' < hosts.cfg | sed s/}/}\\n/g | sed 's/ \+ /,/g' | grep generic-switch lt4 | awk -F "," '{print $3 $ 7}'
- Удалить новую строку char.
- Снова добавьте новую строку в конце определения, когда мы увидим "}".
- Замените пробелы на «».
- Найдите строку со строкой «generic-switch».
- Напечатайте только имя хоста и IP-адрес.
Я предполагаю, что есть лучший подход. Пожалуйста, предложите альтернативы / оптимизации.