Por que o grep não mostra a palavra correspondente até o próximo espaço?

5

Eu tenho um arquivo temp e quero grep a única palavra que corresponde ao padrão em vez da palavra inteira. Eu tentei grep -o <pattern> file , mas não está me dando saída desejada

Entrada

xi29 vddf vss vddf vss int_s s2 rstb mg91a02_l_nd2_bulk_vt1 ln1=16n ln2=16n lp1=16n lp2=16n nf_n1=1 nf_n2=1 nf_p1=1 nf_p2=1  
xi28 vddf vss vddf vss d1 d mg91a02_l_inv_bulk_vt1 ln=16n lp=16n nf_n=1 nf_p=1 nfin_n=2 nfin_p=2 m=1  
xi25 vddf vss vddf vss int_m2 int_m1 mg91a02_l_inv_bulk_vt1 ln=16n lp=16n nf_n=1 nf_p=1 

Comando

grep -o 'mg91a02' temp

Saída (obtida)

mg91a02
mg91a02
mg91a02

Saída (desejada)

mg91a02_l_nd2_bulk_vt1
mg91a02_l_inv_bulk_vt1
mg91a02_l_inv_bulk_vt1
    
por JigarGandhi 09.12.2014 / 07:38

3 respostas

6

tente

 grep -E -o 'mg91a02\w+' 

onde

  • -E : regexp estendido
  • -o imprimir apenas palavra correspondente
  • \w : não é um espaço em branco
  • + uma ou mais vezes
por 09.12.2014 / 09:27
2
grep -o 'mg91a02[^ ]*' file

Isso significa padrão de impressão mg91a02 até não ser visto ^ primeiro espaço ( [^ ] ) ou significa imprimir tudo o que não é um espaço.

    
por 09.12.2014 / 08:50
1

Com expressões regulares Perl:

grep -Po '\w*mg91a02\w*'

Por exemplo:

$ grep -Po top .zshrc
top
top
top
top
top
top
top
$ grep -Po '\w*top\w*' .zshrc
setopt
setopt
autopushd
setopt
setopt
setopt
setopt
    
por 09.12.2014 / 09:25