git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] t9001: avoid not portable '\n' with sed

From
John Keeping <john@keeping.me.uk>
Date
Jun 4, 2014, 18:46 UTC
Message-ID
<20140604184604.GC14457@serenity.lan>
In-Reply-To
<xmqqr434vaeh.fsf@gitster.dls.corp.google.com>
On Wed, Jun 04, 2014 at 10:42:46AM -0700, Junio C Hamano wrote:
Show 21 quoted lines
> Torsten Bögershausen <tboegi@web.de> writes:
> 
> > t9001 used a '\n' in a sed expression to split one line into two lines.
> > Some versions of sed simply ignore the '\' before the 'n', treating
> > '\n' as 'n'.
> >
> > As the test already requires perl as a prerequisite, use perl instead of sed.
> >
> > Signed-off-by: Torsten Bögershausen <tboegi@web.de>
> > ---
> 
> Hmph.  I read this in pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html
> 
>     The escape sequence '\n' shall match a <newline> embedded in the
>     pattern space.
> 
> so it may be better to be a bit more explicit in the log message to
> say whose implementation has this issue to warn people.
> 
> > -	sed "s/^From:/$header: extra@address.com\nFrom:/" cover-to-edit.patch >"$cover" &&
> > +	"$PERL_PATH" -pe "s/^From:/$header: extra\@address.com\nFrom:/" cover-to-edit.patch | tr Q "$LF" >"$cover" &&

Note that quoted section of POSIX says "embedded in the pattern space"; under the description of the "s" command, it says:

	The replacement string shall be scanned from beginning to end.
	[...]
	The meaning of a <backslash> immediately followed by any
	character other than '&', <backslash>, a digit, or the delimiter
	character used for this command, is unspecified.
	A line can be split by substituting a <newline> into it. The
	application shall escape the <newline> in the replacement by
	preceding it by a <backslash>.
So the portable way to do it is:
	sed "s/^From:/$header: extra@address.com\
From:/" cover-to-edit.patch >"$cover" &&

but that requires the continuation to start in column 0, so the Perl variant is probably neater.

Previous: Torsten BögershausenNext: Junio C Hamano
Message 5 of 8 in “t9001: avoid not portable '\n' with sed”
  1. t9001: avoid not portable '\n' with sedTorsten Bögershausen, Jun 4, 2014
  2. Junio C HamanoJun 4, 2014
  3. Junio C HamanoJun 4, 2014
  4. Torsten BögershausenJun 4, 2014
  5. John KeepingJun 4, 2014
  6. Junio C HamanoJun 4, 2014
  7. Andreas SchwabJun 4, 2014
  8. David KastrupJun 4, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.