Download raw body.
sed vs gsed mismatch
Greg Steuck <gnezdo@openbsd.org> writes:
> Does anybody understand why /usr/bin/sed doesn't match gsed's behavior here?
>
> % echo ' LLVM version 13.0.0' | gsed -n -e 's/.*version \(\([0-9]\+\.\)\+[0-9]\+\).*/\1/gp'
> 13.0.0
> % echo ' LLVM version 13.0.0' | sed -n -e 's/.*version \(\([0-9]\+\.\)\+[0-9]\+\).*/\1/gp'; echo
>
> %
>
by default, sed uses basic regular expressions (BREs), and the +
operator isn't part of it. see re_format(7), section "BASIC REGULAR
EXPRESSIONS".
$ # using \{1,\} instead of \+
$ echo ' LLVM version 13.0.0' | sed -n -e 's/.*version \(\([0-9]\{1,\}\.\)\{1,\}[0-9]\{1,\}\).*/\1/gp'
13.0.0
$ # using extended regular expressions (EREs)
$ echo ' LLVM version 13.0.0' | sed -E -n -e 's/.*version (([0-9]+\.)+[0-9]+).*/\1/gp'
13.0.0
Regards.
--
Sebastien Marie
sed vs gsed mismatch