我有这样的短信:
ora.sas.aa.svc
1 ONLINE ONLINE sas1
ora.sas.bb.svc
1 ONLINE ONLINE sas2
ora.sas.cc.svc
1 ONLINE ONLINE sas2
ora.sas.dd.svc
1 ONLINE ONLINE sas1
ora.sas.ee.svc
1 ONLINE ONLINE sas1
2 ONLINE ONLINE sas2 我想要的是grep这个.svc和在线状态的特定部分,比如:
example.txt _grep aa
ora.sas.aa.svc
1 ONLINE ONLINE sas1 或
example.txt =grep ee
ora.sas.ee.svc
1 ONLINE ONLINE sas1
2 ONLINE ONLINE sas2 行号“联机”可能会改变,所以我不能用grep -A2或grep -A3的grep。
发布于 2014-04-22 14:30:25
您可以使用awk代替:
awk -v s='ee' 'NF==1 && $0 ~ s{p=1} NF==1 && !($0 ~ s){p=0} p' file
ora.sas.ee.svc
1 ONLINE ONLINE sas1
2 ONLINE ONLINE sas2
awk -v s='aa' 'NF==1 && $0 ~ s{p=1} NF==1 && !($0 ~ s){p=0} p' file
ora.sas.aa.svc
1 ONLINE ONLINE sas1发布于 2014-04-22 14:30:17
不确定是否可以使用grep,但您肯定可以使用awk。
<example.txt awk 'NF==1 { got_match = ($0 ~ /PATTERN/)} got_match {print}'用"ee“或"aa”替换模式,它应该能做到这一点。
发布于 2014-04-22 14:32:51
用sed
$ func() {
> sed -n "/$1/{:a;p;n;/^[[:space:]]/ba}" "$2"
> }
$ func aa example.txt
ora.sas.aa.svc
1 ONLINE ONLINE sas1
$ func ee example.txt
ora.sas.ee.svc
1 ONLINE ONLINE sas1
2 ONLINE ONLINE sas2https://stackoverflow.com/questions/23222389
复制相似问题