2014-04-22 6 views
1

J'ai un texte comme celui-ci:Grep partie spécifique du texte

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 

Ce que je veux est grep partie spécifique de ce .svc et le statut en ligne comme:

example.txt |grep aa 
ora.sas.aa.svc 
      1  ONLINE ONLINE  sas1  

ou

example.txt |grep ee 
ora.sas.ee.svc 
     1  ONLINE ONLINE  sas1           
     2  ONLINE ONLINE  sas2 

numéro de ligne de "en ligne" peut changer, donc je ne peux pas grep avec grep -A2 ou grep -A3.

Répondre

2

Vous pouvez utiliser à la place 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

Vous ne savez pas si vous pouvez le faire avec grep, mais vous pouvez certainement le faire avec awk. Remplacez PATTERN par «ee» ou «aa» et cela devrait faire l'affaire.

1

Avec 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 
Questions connexes