在文件中搜索字符串,然后找到与不同字符串匹配的前面行



我有一些硬件负载平衡器配置,我想使用任何可用的 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

最新更新