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?
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?
Because sed is not perl -- sed regexes do not have a \d shorthand:
sed 's/[[:digit:]]\+\.//g'
sed regular expression documentation here.
/[[:digit:]]*\. / will match the string foo. because you allow for zero digits. If you want one or more use \+ as shown
– glenn jackman
Mar 02 '16 at 11:19
Two problems:
sed does not support \d. Use [0-9] or [[:digit:]].
+ must be backslashed to get the special meaning: \+.
interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's). Sadly, this doesn't help with the \d issue...
– gMale
Aug 06 '13 at 01:01
sed just sucks when it comes to portability...
– iconoclast
Jul 14 '14 at 15:16
-E on BSD sed and -r on GNU sed), in BSD sed, neither + nor \+ (same with ?) will work at all, whereas in GNU sed you can get them to work with the backslash. Hence the common recommendation to use extended regex in scripting
– Steven Lu
Jun 28 '18 at 21:55
-E can be relied upon in linux to do the same as -r is what's unclear to me now.
– Steven Lu
Jun 28 '18 at 22:04
+ does, you don't need SE but a tutorial for basics
– BIOStheZerg
Jul 20 '22 at 09:27
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
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.