How to match digits followed by a dot using sed?
I'm trying to use sed
to substitute all the patterns with digits followed immediately by a dot (such as 3.
, 355.
) by an empty string. So I try:
sed 's/\d+\.//g' file.txt
But it doesn't work. Why is that?
Solution 1:
Because sed is not perl -- sed regexes do not have a \d
shorthand:
sed 's/[[:digit:]]\+\.//g'
sed regular expression documentation here.
Solution 2:
Two problems:
sed
does not support\d
. Use[0-9]
or[[:digit:]]
.+
must be backslashed to get the special meaning:\+
.
Solution 3:
The sed man page references the re_format man page. It makes 2 distinctions: (1) obsolete versus extended regular expressions; (2) non-enhanced versus enhanced regular expressions. All 4 combinations are possible. There is support in sed for both obsolete and extended, but in either case only for non-enhanced. The \d operator is a feature of enhanced regular expressions, therefore not supported by sed.
Solution 4:
Adding to the other answers a few years later, I found I wanted the extended feature for a more complex regex
This expects simply +
for one or more, and generally made the string more obvious to me for both my case and this one
# NOTE \d is not supported
sed --regexp-extended 's/[0-9]+\.//g'
-E
-r
--regexp-extended
are all the same
Using sed
4.7