我正在撰寫一個腳本來使用 BASH 更改 Nagios 插件服務定義。我需要附加聯系人組名稱行,但僅適用于某些服務定義。所以我會從這個開始。
define service {
use sites-service
host_name my_host
service_description check_reboot_os_updates
check_command check_reboot_os_updates
contact_groups contactgroup1
servicegroups MyGroup
}
define service {
use linux-service
host_name my_host
service_description other_description
check_command other_command
contact_groups contactgroup1
servicegroups MyGroup
}
而且我只想附加選擇的聯系人組行。所以說我想向這樣的 Linux 服務添加一個額外的聯系人組。
define service {
use sites-service
host_name my_host
service_description check_reboot_os_updates
check_command check_reboot_os_updates
contact_groups contactgroup1
servicegroups MyGroup
}
define service {
use linux-service
host_name my_host
service_description other_description
check_command other_command
contact_groups contactgroup1, contactgroup2
servicegroups MyGroup
}
有沒有辦法使用 sed 或 awk 或其他方法來做到這一點?
uj5u.com熱心網友回復:
使用sed,如果字串linux-service是唯一的,您可以嘗試從包含字串的行到包含在匹配中contact_groups附加附加組的字串的行進行匹配。
$ sed '/linux-service/,/contact_groups/s/contact_groups.*/&, contactgroup2/' input_file
define service {
use sites-service
host_name my_host
service_description check_reboot_os_updates
check_command check_reboot_os_updates
contact_groups contactgroup1
servicegroups MyGroup
}
define service {
use linux-service
host_name my_host
service_description other_description
check_command other_command
contact_groups contactgroup1, contactgroup2
servicegroups MyGroup
uj5u.com熱心網友回復:
和 awk
awk '
$1 == "use" {use = $2}
use == "linux-service" && $1 == "contact_groups" {$0 = $0 ", contactgroup2"}
{print}
' file
要更新檔案:
gawk -i inplace '...' fileawk '...' file | sponge file-- 需要moreutils包f=$(mktemp); awk '...' file > "$f" && mv "$f" file
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364444.html
上一篇:查詢的格式輸出
下一篇:替換匹配模式前兩行的字串
