GNU bug report logs - #78883
backslash interpretation in 's' replacement text violates POSIX

Previous Next

Package: sed;

Reported by: Bruno Haible <bruno <at> clisp.org>

Date: Mon, 23 Jun 2025 21:48:02 UTC

Severity: normal

Full log


Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Bruno Haible <bruno <at> clisp.org>
To: bug-sed <at> gnu.org
Subject: backslash interpretation in 's' replacement text violates POSIX
Date: Mon, 23 Jun 2025 23:46:47 +0200
Hi,

When the replacement text in an 's' command contains an escape sequence
like '\n', GNU sed interprets this escape sequence, while other implementations
(OpenBSD sed, Solaris sed) do not.

How to reproduce:

$ echo foo | sed -e 's/f.*/line1\nline2/'
line1
line2

$ echo foo | POSIXLY_CORRECT=1 sed --posix -e 's/f.*/line1\nline2/'
line1
line2

Seen with GNU sed 4.9.

While OpenBSD sed, Solaris sed produce:

$ echo foo | sed -e 's/f.*/line1\nline2/'
line1nline2

POSIX [1] is ambiguous here, I would say:
Quoting:
  "For each other <backslash> encountered, the following character shall
   lose its special meaning (if any)."
but also
  "The meaning of an unescaped <backslash> immediately followed by any
   character other than '&', <backslash>, a digit, <newline>, or the
   delimiter character used for this command, is unspecified."

So the interpretation of escape sequences looks like a GNU extension.

By the description of the '--posix' option ("In order to simplify
writing portable scripts"), the --posix option should turn off this
interpretation. Or, better, emit a diagnostic.

Bruno

[1] https://pubs.opengroup.org/onlinepubs/9799919799/utilities/sed.html







This bug report was last modified 45 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.