Issue
This does not generate any output. How come?
$ echo 'this 1 2 3' | grep '\d\+'
But these do:
$ echo 'this 1 2 3' | grep '\s\+'
this 1 2 3
$ echo 'this 1 2 3' | grep '\w\+'
this 1 2 3
Solution
As specified in POSIX, grep
uses basic regular expressions, but \d
is part of a Perl-compatible regular expression (PCRE).
If you are using GNU grep, you can use the -P
option, to allow use of PCRE regular expressions. Otherwise you can use the POSIX-specified [[:digit:]]
character class in place of \d
.
echo 1 | grep -P '\d'
# output: 1
echo 1 | grep '[[:digit:]]'
# output: 1
Answered By - Daenyth