Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Mar 2009 11:29:49 +0200
From:      Nikos Vassiliadis <nvass9573@gmx.com>
To:        David Banning <david+dated+1237311277.37b93e@skytracker.ca>
Cc:        questions@freebsd.org
Subject:   Re: sed error "unescaped newline inside substitute pattern"
Message-ID:  <49BA278D.5080800@gmx.com>
In-Reply-To: <20090312173436.GA51898@skytracker.ca>
References:  <20090312173436.GA51898@skytracker.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
David Banning wrote:
> Here is the php line that gives the error;
> 
> cat start_text | sed "s/--maintext--/$test/" > endtext
> 
> give error;
> 
> sed: 1: "s/--maintext--/ Comment ...": unescaped newline inside substitute pattern
> 
> where $test contains customer input from a website form
> 
> There is something about the content of the text within the variable $test that is causing the error.
> 
> Any pointers would be helpful.

You cannot use unescaped newlines in the replacement string:
# sed 's/foo/foo<<<Press enter here>>>
 > bar/'
sed: 1: "s/foo/foo
bar/": unescaped newline inside substitute pattern

You have to precede each newline character with a backslash:
# sed 's/foo/foo\<<<Press enter here>>>
 > bar/'
foo
foo
bar

The examples above are made using the bourne shell. The
above doesn't work in csh.

It's the documented behavior:
  2.   The escape sequence \n matches a newline character embedded in the
  pattern space.  You cannot, however, use a literal newline character
  in an address or in the substitute command.

  ...

  A line can be split by substituting a newline character into it.
  To specify a newline character in the replacement string, precede
  it with a backslash.

I am sure there is some good reason behind this...

OT, you should not pass parameters to shell scripts
using double quotes, since the shell will evaluate
possible variable values:
# echo "$OSTYPE"
FreeBSD
# echo '$OSTYPE'
$OSTYPE

I really doubt you want the first behavior, that is, variable
evaluation for strings coming from a web server.

HTH, Nikos



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49BA278D.5080800>