我有一些硬件负载平衡器配置,我想使用任何可用的 linux 工具(例如 sed、awk、grep 等(进行解析。
我想搜索短语address 10.1.104.164
,我想知道它所在的池子。例如,如果我们搜索10.1.104.164
我希望它返回:
ltm pool pool_10.1.105.30_80
ltm pool pool_10.1.105.31_80
这是我正在搜索的文件示例:
ltm pool pool_10.1.105.30_80 {
load-balancing-mode observed-member
members {
node_10.1.104.163:http {
address 10.1.104.163
session monitor-enabled
state up
}
node_10.1.104.164:http {
address 10.1.104.164
session monitor-enabled
state up
}
}
monitor http_200_OK
}
ltm pool pool_10.1.105.31_80 {
load-balancing-mode observed-member
members {
node_10.1.104.163:http {
address 10.1.104.163
session monitor-enabled
state up
}
node_10.1.104.164:http {
address 10.1.104.164
session monitor-enabled
state up
}
}
monitor http_200_OK
}
提前感谢,克里斯
编辑:拼写和格式。
带perl
:
$ perl -0777 -lne 'while (/^(ltm pool pool_[d._]+)(.*?)(?=^})/gms){
$m=$1; $t=$2;
print "$mn" if ($t =~ /address 10.1.104.164/)}' file
ltm pool pool_10.1.105.30_80
ltm pool pool_10.1.105.31_80
$ awk -v tgt="address 10.1.104.164" '
/^ltm pool/ { pool=$0; sub(/ *{ *$/,"",pool) }
index($0" ",tgt" ") { print pool }
' file
ltm pool pool_10.1.105.30_80
ltm pool pool_10.1.105.31_80