What's the difference between b and < in the grep command
Clash Royale CLAN TAG#URR8PPP
up vote
5
down vote
favorite
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.
linux command-line grep
add a comment |Â
up vote
5
down vote
favorite
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.
linux command-line grep
I can't think of any useful usage of<
or>
where you can't substituteb
. 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 '14 at 9:58
I have to disagree I will prove it :-) I'll edit my answer to add an example
â Kiwy
Mar 27 '14 at 10:09
<
predates vim (it was used in grep during the 1980s).
â Thomas Dickey
Apr 25 '16 at 1:01
add a comment |Â
up vote
5
down vote
favorite
up vote
5
down vote
favorite
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.
linux command-line grep
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.
linux command-line grep
linux command-line grep
asked Mar 27 '14 at 9:36
duleshi
156126
156126
I can't think of any useful usage of<
or>
where you can't substituteb
. 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 '14 at 9:58
I have to disagree I will prove it :-) I'll edit my answer to add an example
â Kiwy
Mar 27 '14 at 10:09
<
predates vim (it was used in grep during the 1980s).
â Thomas Dickey
Apr 25 '16 at 1:01
add a comment |Â
I can't think of any useful usage of<
or>
where you can't substituteb
. 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 '14 at 9:58
I have to disagree I will prove it :-) I'll edit my answer to add an example
â Kiwy
Mar 27 '14 at 10:09
<
predates vim (it was used in grep during the 1980s).
â Thomas Dickey
Apr 25 '16 at 1:01
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 '14 at 9:58
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 '14 at 9:58
I have to disagree I will prove it :-) I'll edit my answer to add an example
â Kiwy
Mar 27 '14 at 10:09
I have to disagree I will prove it :-) I'll edit my answer to add an example
â Kiwy
Mar 27 '14 at 10:09
<
predates vim (it was used in grep during the 1980s).â Thomas Dickey
Apr 25 '16 at 1:01
<
predates vim (it was used in grep during the 1980s).â Thomas Dickey
Apr 25 '16 at 1:01
add a comment |Â
1 Answer
1
active
oldest
votes
up vote
6
down vote
<
matches the beginning of a word>
matches the end of a wordb
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.
Example
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 shows that it can useful sometimes to match precisely the end of word instead of a word boundary because the use of matching space character is avoided 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 start 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.
But can you think of a situation where it is useful to use<
or>
instead ofb
?
â Graeme
Mar 27 '14 at 10:04
1
@Graeme:<..>
would search for 2-letter words.
â Stéphane Chazelas
Mar 27 '14 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 '14 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 '14 at 10:26
Note that for three letter words, you'd have to write it<w3>
anyway, and that would be the same asbw3b
â Stéphane Chazelas
Mar 27 '14 at 10:27
 |Â
show 6 more comments
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
6
down vote
<
matches the beginning of a word>
matches the end of a wordb
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.
Example
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 shows that it can useful sometimes to match precisely the end of word instead of a word boundary because the use of matching space character is avoided 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 start 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.
But can you think of a situation where it is useful to use<
or>
instead ofb
?
â Graeme
Mar 27 '14 at 10:04
1
@Graeme:<..>
would search for 2-letter words.
â Stéphane Chazelas
Mar 27 '14 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 '14 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 '14 at 10:26
Note that for three letter words, you'd have to write it<w3>
anyway, and that would be the same asbw3b
â Stéphane Chazelas
Mar 27 '14 at 10:27
 |Â
show 6 more comments
up vote
6
down vote
<
matches the beginning of a word>
matches the end of a wordb
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.
Example
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 shows that it can useful sometimes to match precisely the end of word instead of a word boundary because the use of matching space character is avoided 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 start 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.
But can you think of a situation where it is useful to use<
or>
instead ofb
?
â Graeme
Mar 27 '14 at 10:04
1
@Graeme:<..>
would search for 2-letter words.
â Stéphane Chazelas
Mar 27 '14 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 '14 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 '14 at 10:26
Note that for three letter words, you'd have to write it<w3>
anyway, and that would be the same asbw3b
â Stéphane Chazelas
Mar 27 '14 at 10:27
 |Â
show 6 more comments
up vote
6
down vote
up vote
6
down vote
<
matches the beginning of a word>
matches the end of a wordb
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.
Example
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 shows that it can useful sometimes to match precisely the end of word instead of a word boundary because the use of matching space character is avoided 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 start 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.
<
matches the beginning of a word>
matches the end of a wordb
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.
Example
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 shows that it can useful sometimes to match precisely the end of word instead of a word boundary because the use of matching space character is avoided 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 start 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.
edited Jun 22 '15 at 15:17
Sildoreth
85831535
85831535
answered Mar 27 '14 at 9:43
Kiwy
5,79453455
5,79453455
But can you think of a situation where it is useful to use<
or>
instead ofb
?
â Graeme
Mar 27 '14 at 10:04
1
@Graeme:<..>
would search for 2-letter words.
â Stéphane Chazelas
Mar 27 '14 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 '14 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 '14 at 10:26
Note that for three letter words, you'd have to write it<w3>
anyway, and that would be the same asbw3b
â Stéphane Chazelas
Mar 27 '14 at 10:27
 |Â
show 6 more comments
But can you think of a situation where it is useful to use<
or>
instead ofb
?
â Graeme
Mar 27 '14 at 10:04
1
@Graeme:<..>
would search for 2-letter words.
â Stéphane Chazelas
Mar 27 '14 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 '14 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 '14 at 10:26
Note that for three letter words, you'd have to write it<w3>
anyway, and that would be the same asbw3b
â Stéphane Chazelas
Mar 27 '14 at 10:27
But can you think of a situation where it is useful to use
<
or >
instead of b
?â Graeme
Mar 27 '14 at 10:04
But can you think of a situation where it is useful to use
<
or >
instead of b
?â Graeme
Mar 27 '14 at 10:04
1
1
@Graeme:
<..>
would search for 2-letter words.â Stéphane Chazelas
Mar 27 '14 at 10:08
@Graeme:
<..>
would search for 2-letter words.â Stéphane Chazelas
Mar 27 '14 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 '14 at 10:20
@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 '14 at 10:20
1
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 '14 at 10:26
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 '14 at 10:26
Note that for three letter words, you'd have to write it
<w3>
anyway, and that would be the same as bw3b
â Stéphane Chazelas
Mar 27 '14 at 10:27
Note that for three letter words, you'd have to write it
<w3>
anyway, and that would be the same as bw3b
â Stéphane Chazelas
Mar 27 '14 at 10:27
 |Â
show 6 more comments
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f121739%2fwhats-the-difference-between-b-and-in-the-grep-command%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
I can't think of any useful usage of
<
or>
where you can't substituteb
. 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 '14 at 9:58
I have to disagree I will prove it :-) I'll edit my answer to add an example
â Kiwy
Mar 27 '14 at 10:09
<
predates vim (it was used in grep during the 1980s).â Thomas Dickey
Apr 25 '16 at 1:01