Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

In the man page of grep, I see

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.

But I still can't figure out the difference. To me, \b is Perl's notation for word boundary, while \< is Vim's notation for the same purpose.
PS: English is not my native language. Pardon me if the difference is obvious to you.

share|improve this question
    
I can't think of any useful usage of \< or \> where you can't substitute \b. Obviously you can use \< and \> to create patterns that don't match anything, but that's not much use! So in practice it looks like there is no difference. –  Graeme Mar 27 at 9:58
    
I have to disagree I will prove it :-) I'll edit my answer to add an example –  Kiwy Mar 27 at 10:09

1 Answer 1

\< matches the beginning of a word
\> matches the end of a word
\b matches both boundaries if at the end or at the beginning

The important thing about those special characters is that they match an empty string and not the word boundary itself. a word boundary being the contrary of the the set of character represented by \w equivalent of [_[:alnum:]] (letter a to Z, digits and _) in Posix notation.

exemple

Finally Graeme find a very interesting example:

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

Currently this example show that it can useful sometime to match precisely the end of word instead of a word boundary because the use of matching space character is avoid by matching the end of word.
So in a more useful example I would say that if you want to match non word character and the end of this non word, you can't use \> but maybe \b can be used in this particular case because it will match the strat of the next word.

So far no example manage to reach my mind. But in my opinion, there are probably some few use cases where it make sense, but my guess is that it's onlyfor readability purpose, Because when you put \b it's vague but if you precise start or end of the word then it gives a better understanding of the regexp to the persons who read it.

share|improve this answer
    
But can you think of a situation where it is useful to use \< or \> instead of \b? –  Graeme Mar 27 at 10:04
1  
@Graeme: \<..\> would search for 2-letter words. –  Stéphane Chazelas Mar 27 at 10:08
    
@StephaneChazelas Ok, I see, so anything that matches a space or a word character can leave it ambiguous as to whether you are at the beginning or end of a word. –  Graeme Mar 27 at 10:20
1  
Note those are transitions from word to non-word characters, they have nothing to do with spaces (which is just one of many non-word characters). –  Stéphane Chazelas Mar 27 at 10:26
    
Note that for three letter words, you'd have to write it \<\w{3}\> anyway, and that would be the same as \b\w{3}\b –  Stéphane Chazelas Mar 27 at 10:27

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.