We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
- Prepare
- Linux Shell
- Grep Sed Awk
- 'Grep' - B
- Discussions
'Grep' - B
'Grep' - B
Sort by
recency
|
88 Discussions
|
Please Login in order to post a comment
Since the
grep
in this environment doesn't support Perl-style regular expressions, you can't use "\d". If you use Basic Regular Expressions (the default and equivalent to--basic-regexp
or-G
), you can use the character class[0-9]
(see https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html).In BRE, the capture group must be defined in a subexpression with
\( \)
and then can be recalled with\1
(see https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions). Finally, BRE doesn't support using the precise '?' matching operator to pick out the optional space, but it does permit the more greedy '*'. So you end up with:grep '\([0-9]\)\s*\1'
there could be zero or one space between the repeated numbers...
I don't know why 9999 5628 9201 1232 shouldn't be in the output. I guess the test has some part wrong.
On my system (Ubuntu 20.04 with GNU grep 3.4 the following simpler command works as well:
grep -E "([0-9]) ?\1"
I don't understand why it doesn't work here.grep "\(\d\)\s?\1"