[英]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.