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文件中收集一些特定数据-条件是
a。它应该在池abc大括号内。即pool abc {....}
b。数据是IP地址-在内部称为地址x.x.x.x
例如,将值“ abc”作为变量值传递时,输出应为:
1.2.3.4
5.6.7.8
注意-这里的“ abc”是变量的值,需要将其传递给执行上述任务的脚本。
我已尝试将正则表达式作为:cat sample.txt | grep -P "abc {([\S\s]*)}"
-不起作用
无法应用逻辑。
答案 0 :(得分:1)
请您尝试使用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