sed error "unescaped newline inside substitute pattern"
Nikos Vassiliadis
nvass9573 at gmx.com
Fri Mar 13 02:30:15 PDT 2009
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
More information about the freebsd-questions
mailing list