Index | Thread | Search

From:
Sebastien Marie <semarie@kapouay.eu.org>
Subject:
Re: sed vs gsed mismatch
To:
Greg Steuck <gnezdo@openbsd.org>, tech@openbsd.org
Date:
Sun, 11 Feb 2024 09:37:36 +0100

Download raw body.

Thread
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