De acordo com a 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 fica assim:
/dev/sdb1 /media/fresh ext2 defaults 0 0
Quero que o grep retorne TRUE / FALSE pela 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
grep
regular-expression
Felipe Alvarez
fonte
fonte
/
não seja considerado um caractere de palavra, portanto, regex não corresponderá - "\ b corresponde antes e depois de uma sequência alfanumérica" é mais exato do que dizer "antes e depois de uma palavra"Respostas:
\<
e\>
corresponder a sequência vazia no início e no final de uma palavra, respectivamente, e apenas os caracteres constituintes da palavra são:De
man grep
:Portanto, seu Regex está falhando porque
/
não é um caractere válido da palavra constituinte.Em vez disso, como você tem espaços, pode usar a
-w
opção degrep
para corresponder uma palavra:Exemplo:
fonte
Esse problema com
\<
(e também\b
) se aplica não apenas a/
, mas a todos os caracteres que não sejam palavras. (ou seja, caracteres diferentes de[[:alnum:]]
e_
.)O problema é que o mecanismo regex sempre ignora um caractere que não seja da palavra, como
/
na pesquisa da próxima âncora\<
. É por isso que você não deve colocar caracteres que não sejam palavras como/
depois\<
. Se o fizer, por construção, nada corresponderá.Uma alternativa à
-w
opção do grep seria algo como isto:fonte