Limites de palavras Grep

16

Accorging à documentação do GNU:

‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.

Meu / etc / fstab é assim:

/dev/sdb1       /media/fresh      ext2   defaults     0 0

Eu quero que o grep retorne TRUE / FALSE para a existência de / media / fresh. Eu tentei usar \< e \> , mas não funcionou. Por quê?

egrep '\</media/fresh\>' /etc/fstab

Solução alternativa:

egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab

Mas parece mais feio.

Meu grep é 2.5.1

    
por Felipe Alvarez 09.05.2016 / 06:21

1 resposta

19

\< e \> correspondem à sequência vazia no início e no final de uma palavra, respectivamente, e apenas os caracteres constituintes da palavra são:

[[:alnum:]_]

De man grep :

Word-constituent characters are letters, digits, and the underscore.

Então, seu Regex está falhando porque / não é um caractere constituinte de palavras válido.

Em vez disso, à medida que você tem espaços, é possível usar a opção -w de grep para corresponder a uma palavra:

grep -wo '/media/fresh' /etc/fstab

Exemplo:

$ grep -wo '/media/fresh' <<< '/dev/sdb1       /media/fresh      ext2   defaults     0 0'
/media/fresh
    
por 09.05.2016 / 06:40