2014-04-22 25 views
1

的特定部分,我有這樣的文字:grep的文字

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 -A2grep -A3用grep。

回答

2

您可以用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 
2

不知道,如果你可以使用grep這樣做,但你絕對可以用awk完成這件事。

<example.txt awk 'NF==1 { got_match = ($0 ~ /PATTERN/)} got_match {print}' 

用「ee」或「aa」替換PATTERN,它應該做的伎倆。

1

隨着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  sas2