É possível usar o grep para pegar apenas palavras inteiras? [duplicado]

10

Quando eu uso o comando grep, todas as ocorrências de uma palavra são selecionadas, mesmo que sejam parte de outras palavras. Por exemplo, se eu usar o grep para encontrar ocorrências da palavra 'o', ele também destacará 'o' no 'teatro'

Existe uma maneira de adaptar o comando grep para que ele apenas pegue palavras completas e não parte de palavras?

    
por Nathan Shoesmith 02.03.2017 / 17:42

3 respostas

15
 -w, --word-regexp
              Select  only  those  lines  containing  matches  that form whole
              words.  The test is that the matching substring must  either  be
              at  the  beginning  of  the  line,  or  preceded  by  a non-word
              constituent character.  Similarly, it must be either at the  end
              of  the  line  or  followed by a non-word constituent character.
              Word-constituent  characters  are  letters,  digits,   and   the
              underscore.

de man grep

    
por 02.03.2017 / 17:49
11

Além disso, você pode usar isto:

echo "this is the theater" |grep --color '\bthe\b'

Para uma palavra é o mesmo com -w.
Mas se você precisar pesquisar vários padrões, poderá usar o \ b, caso contrário, todos os padrões serão tratados como palavras se -w estiver em uso.

Por exemplo:

grep -w -e 'the' -e 'lock'

irá destacar e bloquear mas não bloquear / cadeado, etc.

Com \ b você pode tratar cada padrão -e de forma diferente.

Teste aqui .

    
por 02.03.2017 / 18:04
6

Você pode testar a presença do começo (resp. final) de uma palavra com o marcador \< (resp. \> ).

Assim,

grep "\<the\>" << .
the cinema
a cinema
the theater
a theater
breathe
.

the cinema
the theater
    
por 02.03.2017 / 21:47

Tags