Referência

Referência

Na página de manual do grep, vejo

The symbols \< and \> respectively match the empty string at the beginning and  
end of a word.  The symbol \b matches the  empty  string at  the  edge  of  a  word.

Mas ainda não consigo descobrir a diferença. Para mim, \bé a notação do Perl para limite de palavras, enquanto \<é a notação do Vim para o mesmo propósito.
PS: Inglês não é minha língua nativa. Perdoe-me se a diferença é óbvia para você.

Responder1

\<corresponde ao início de uma palavra
\>corresponde ao final de uma palavra
\bcorresponde a ambos os limites se estiver no final ou no início

O importante sobre esses caracteres especiais é que eles correspondem a uma string vazia e não ao limite da palavra em si. um limite de palavra sendo o contrário do conjunto de caracteres representado pelo \wequivalente de [_[:alnum:]](letra a a Z, dígitos e _) na notação Posix.

Exemplo

Finalmente,Graeme encontrou um exemplo muito interessante:

$ echo 'acegi   z' | grep -o '[acegi ]*\>' | cat -A
acegi$
$ echo 'acegi   z' | grep -o '[acegi ]*\b' | cat -A
acegi   $ 

Atualmente, este exemplo mostra que às vezes pode ser útil corresponder precisamente o final da palavra em vez de um limite de palavra porque o uso do caractere de espaço correspondente é evitado pela correspondência do final da palavra.
Então, em um exemplo mais útil, eu diria que se você quiser combinar um caractere que não seja de palavra e o final dessa não-palavra, não poderá usar \>; mas talvez \bpossa ser usado neste caso específico porque corresponderá ao início da próxima palavra.

Até agora nenhum exemplo conseguiu chegar à minha mente. Mas, na minha opinião, provavelmente existem alguns casos de uso em que isso faz sentido, mas meu palpite é que é apenas para fins de legibilidade, porque quando você coloca \bé vago, mas se você precisa o início ou o final da palavra, isso dá uma melhor compreensão de o regexp para as pessoas que o lêem.

Responder2

Para responder à pergunta sobre o seu título?

Qual é a diferença entre \be \<...

Quase nenhum. Ambos correspondem aolimite, a transição entre uma palavra e uma não palavra.

A únicatécnicodiferença é:

  • A \bcorrespondência com o limite emambosinício e fim de uma palavra.
  • A \<única correspondênciacomeçarde uma palavra.
  • A \>única correspondênciafimde uma palavra.

Opráticodiferença é:

$ echo ',,abc...' | grep -o '[abc.,]*'
,,abc...                                   # match the whole string

$ echo ',,abc...' | grep -o '[abc.,]*\b'
,,abc                                      # to the rightmost (due to *) word boundary.

$ echo ',,abc...' | grep -o '[abc.,]*\>'
,,abc                                      # match to the same point (in this case).

$ echo ',,abc...' | grep -o '[abc.,]*\<'   
,,                                         # match to the rightmost **start** of a word.

O mesmo poderia ser feito com espaços (gato adicionado para revelar os espaços):

Até o "limite de palavra" mais à direita (qualquer) (observe os espaços):

$ echo 'abcd     abcd    Z' | grep -o '[a-z ]*\b' | cat -A
abcd     abcd    $

Até o "início da palavra" mais à direita (mesmo ponto):

$ echo 'abcd     abcd    Z' | grep -o '[a-z ]*\<' | cat -A
abcd     abcd    $

Até o "fim da palavra" mais à direita (sem espaço à direita):

$ echo 'abcd     abcd    Z' | grep -o '[a-z ]*\>' | cat -A
abcd     abcd$

Ou, com sed:

Limites de quatro palavras:

$ echo "abc %-= def." | sed 's/\b/ |>X<| /g'
 |>X<| abc |>X<|  %-=  |>X<| def |>X<| .

Dois inícios de palavra:

$ echo "abc %-= def." | sed 's/\</ |>X<| /g'
 |>X<| abc %-=  |>X<| def.

E dois finais de palavra:

$ echo "abc %-= def." | sed 's/\>/ |>X<| /g'
abc |>X<|  %-= def |>X<| .

Referência

Da informação GNU sed:

'\b'
Corresponde a um limite de palavra; isto é, corresponde se o caractere à esquerda for um caractere de "palavra" e o caractere à direita for um caractere "não-palavra" ou vice-versa.

     $ echo "abc %-= def." | sed 's/\b/X/g'
     XabcX %-= XdefX.

Começo

'<' Corresponde ao início de uma palavra.

     $ echo "abc %-= def." | sed 's/\</X/g'
     Xabc %-= Xdef.

Fim

'>' Corresponde ao final de uma palavra.

     $ echo "abc %-= def." | sed 's/\>/X/g'
     abcX %-= defX.

informação relacionada