Re: sed error "unescaped newline inside substitute pattern"
On Friday 13 March 2009, David Banning wrote: > Yes - I have control of that - so I could filter out the problem in > php. The only problem is that I don't know what I am filtering. > If I know exactly what the erroneous characters are I could filter > them - I have looked at the file in vi but the problematic characters > are invisible there. Would the php addcslashes() function do what you need? This results in: string(42) "This\nis\nthe\ninput\nfrom the\nweb server" -- Mike Clarke ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"
Re: sed error "unescaped newline inside substitute pattern"
Don't you have control over this web form??? That's the place you should filter your input... The sooner you do the filtering the better. Anyway, you could also use an intermediate variable that replaces all newlines with spaces. # a="This > is > the > input > from the > web server" # b=`echo $a` # sed "s/foo/$b/" foo This is the input from the web server ^D# I hope you won't go that route though... Nikos Yes - I have control of that - so I could filter out the problem in php. The only problem is that I don't know what I am filtering. If I know exactly what the erroneous characters are I could filter them - I have looked at the file in vi but the problematic characters are invisible there. ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"
Re: sed error "unescaped newline inside substitute pattern"
David Banning wrote: I have looked at the file in vi but the problematic characters are invisible there. The problematic character is the newline character, \n, ASCII 0xA. And, yes vi is old but it's a few months now that it supports newlines without problems;) Nikos ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"
Re: sed error "unescaped newline inside substitute pattern"
David Banning wrote: Nikos Vassiliadis wrote: 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<<>> > 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\<<>> > 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 The problem that I am having is that the input is from a web form - so I have to deal with it - I have to somehow modify it so it can pass sed. Don't you have control over this web form??? That's the place you should filter your input... The sooner you do the filtering the better. Anyway, you could also use an intermediate variable that replaces all newlines with spaces. # a="This > is > the > input > from the > web server" # b=`echo $a` # sed "s/foo/$b/" foo This is the input from the web server ^D# I hope you won't go that route though... Nikos ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"
Re: sed error "unescaped newline inside substitute pattern"
Nikos Vassiliadis wrote: 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<<>> > 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\<<>> > 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 The problem that I am having is that the input is from a web form - so I have to deal with it - I have to somehow modify it so it can pass sed. ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"
Re: sed error "unescaped newline inside substitute pattern"
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<<>> > 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\<<>> > 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 ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"
Re: sed error "unescaped newline inside substitute pattern"
On Thu, Mar 12, 2009 at 01:34:36PM -0400, 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. I think your problem is that $ is an end of line as a regex. So sed is choking on the fact that there's some text ("test") after the end of line. I can't really tell you how to fix it, although backslash escaping the $ might be worth a try. Regards, -- Frank Contact info: http://www.shute.org.uk/misc/contact.html ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"
Re: sed error "unescaped newline inside substitute pattern"
> Well, it might be because "test" is a command line function. It actually doesn't matter whether I use the word "test" or any other word as a variable ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"
Re: sed error "unescaped newline inside substitute pattern"
On Thursday 12 March 2009 10:34:36 am 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. Well, it might be because "test" is a command line function. Kent -- kent Stewart Richland, WA http://users.owt.com/kstewart/index.html ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"
sed error "unescaped newline inside substitute pattern"
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. ___ freebsd-questions@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-questions To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"