From: Sebastien Marie Subject: Re: sed vs gsed mismatch To: Greg Steuck , tech@openbsd.org Date: Sun, 11 Feb 2024 09:37:36 +0100 Greg Steuck 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