Como posso grep duas coisas onde se tem opção -w?

5

Eu tenho um arquivo json de onde quero obter o valor de dois itens que estão em uma matriz usando grep . Digamos que eu esteja tentando obter dados dos valores foo e bar , o problema é que bar também corresponde a megabar , então tenho que aplicá-lo com a opção -w .
O problema surge ao tentar encontrá-los ao mesmo tempo, pois tenho que grep para um valor OR o outro.
De this

grep -E '(foo|-w bar)' file
 "foo": "59766",
 "foo": "59770",
 "foo": "59774",
 "foo": "59778",
 "foo": "59782",
 "foo": "59786",

Alguma ideia de como fazer isso?

    
por sysfiend 27.05.2016 / 13:51

2 respostas

15

O limite de palavras tem um efeito semelhante a -w , mas pode ser usado como parte da expressão.

‘\b’
Match the empty string at the edge of a word.
[...]
‘\<’
Match the empty string at the beginning of word.
‘\>’
Match the empty string at the end of word.

Para corresponder bar apenas quando for a palavra inteira, mas foo em qualquer lugar (incluindo palavras mais longas):

grep -E 'foo|\<bar\>'
    
por 27.05.2016 / 14:09
0

Dado que foo seria usado no mesmo contexto que foo e também corresponderia a uma palavra completa, a maneira mais fácil é fazer:

grep -E -w '(foo|bar)' file
    
por 28.05.2016 / 01:17