繁体   English   中英

shell脚本如何通过传递变量来获取多行

[英]shell script how to grab multi lines by passing a variable

sample.txt 文件内容是

pool abc {
        members {
            bc:x {
                address 1.2.3.4
            }
            cc:x {
                address 5.6.7.8           }
        }
        monitor x
    }
    pool cc {
        members {
            bc:x {
                address x.x.x.x
                state up
            }
        }
        monitor x
    }

从上面的 sample.txt 文件我想收集一些特定的数据 - 条件是

一种。 它应该在池 abc 括号内。 即池 abc {....}

数据是 ip 地址 - 里面提到的地址 xxxx

例如,将值“abc”作为变量值传递时,输出应为:

1.2.3.4
5.6.7.8

注意 - 这里的“abc”是一个变量的值,需要传递给执行上述任务的脚本。 我试过正则表达式为: cat sample.txt | grep -P "abc {([\\S\\s]*)}" cat sample.txt | grep -P "abc {([\\S\\s]*)}" -- 不起作用

使用 sed 和 awk 无法应用逻辑。

您能否尝试仅使用 GNU awk和提供的示例进行跟踪、编写和测试。

var="abc"
awk -v var="$var" -v pool="pool" -v RS="" '
match($0,pool " " var".*}$"){
  for(i=1;i<=NF;i++){
    if($i=="address" && $(i+1)~/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){
      print $(i+1)
    }
  }
}
' Input_file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM