PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : sed Bug in Debian? "s/%0D%0A/\n/g"



Glenn
06.12.03, 05:56
Moin,

ich hab's die ganze Nacht über versucht, meinen "QUERY_STRING" in was brauchbares umzuwandeln auf der /bin/sh.

Klappt auch soweit alles ... bis auf die Newline ... statt einer Newline krieg' ich ein extra "n" in den Output.

GNU sed version 3.02
Debian Linux, Kernel 2.4.20

Jemand noch 'ne Idee?

Danke und Gruß, Glenn.

Der Gestreifte
06.12.03, 12:56
Eine Möglichkeit wäre, ein nicht im Ausdruck vorkommendes Zeichen anzuhängen und dieses dann via "tr" gegen "\n" auszutauschen:
echo "%0D%0A" | sed 's/.*$/& ä/' | tr "ä" "\n"Ob das aber in Deinem Fall (apache?) praktikabel ist....

Jinto
06.12.03, 13:25
In der manpage stehts beschrieben.


sed -e 's/bla/\

'
Ich wusste es mal, aber dieses mal hat mir Google die Antwort geliefert. ;)

Änderung:
Falsche Anführungszeichen getauscht.

Glenn
06.12.03, 15:33
Erstmal vielen Dank für eure Antworten ...

Funktioniert nur beides leider auch nicht ... :(

Ich dreh' hier echt bald am Rad ... kann doch nicht so schwer sein ... :rolleyes:

Zur Übersicht mal das minimalisierte Skript --->


#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "<h3>QUERY_STRING:</h3>"
echo "<hr>"
l1=`env| grep QUERY_STRING| awk -F= '{print $3}'`
echo $l1
echo "<br><hr>"
echo "<br><br><br>"
echo "<h3>After Script:</h3>"
echo "<hr>"
l2=`echo $l1 | sed 's/+/ /g'`
l3=`echo $l2 | sed "s/%2F/\//g"`
l4=`echo $l3 | sed "s/%22/\"/g"`
l5=`echo $l4 | sed "s/%27/\'/g"`
l6=`echo $l5 | sed "s/%28/\(/g"`
l7=`echo $l6 | sed "s/%29/\)/g"`
l8=`echo $l7 | sed "s/%2C/\,/g"`
l9=`echo $l8 | sed "s/%3B/\;/g"`
la=`echo $l9 | sed 's/%0D%0A/\n/g'`
echo $la
echo "<br><hr>"

Aufgerufen wird's von --> http://glenn.studio-projekt.de/cgi-bin/editdemo.cgi

Irgendeine Textdatei soll editiert werden und nach Save-Button mit method=get an's Skript übergeben werden.

Ich hab' im Moment wieder den "eigentlich" richtigen sed drin, der genauso wenig funktioniert, wie der von Jinto oder der tr von dem Gestreiften.

*ratlos guck*

HEMIcuda
06.12.03, 15:52
Auch mal ein Vorschlag von mir:


s/%0D%0A/$(echo -e "\n")/g

HTH

'cuda

Jinto
06.12.03, 17:24
Hast du es denn auch so gemacht wie ich es geschrieben habe?

Es muss genauso aussehen. Auch mit dem Zeilenumbruch, der ist Absicht!

Glenn
06.12.03, 17:32
Original geschrieben von Jinto
Hast du es denn auch so gemacht wie ich es geschrieben habe?

Natürlich nicht ... wozu auch? ... :D

Ich hab' immer noch versucht, das stdout in die Variable zu kriegen ... mit la=`echo bla bla`... das klappt aber scheinbar nicht, wenn man über mehrere Zeilen geht.

Egal ... mit der Lösung jetzt kann ich auch prima leben.


#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "<h3>QUERY_STRING:</h3>"
echo "<hr>"
l1=`env| grep QUERY_STRING| awk -F= '{print $3}'`
echo $l1
echo "<br><hr>"
echo "<br><br><br>"
echo "<h3>After Script:</h3>"
echo "<hr>"
l2=`echo $l1 | sed 's/+/ /g'`
l3=`echo $l2 | sed "s/%2F/\//g"`
l4=`echo $l3 | sed "s/%22/\"/g"`
l5=`echo $l4 | sed "s/%27/\'/g"`
l6=`echo $l5 | sed "s/%28/\(/g"`
l7=`echo $l6 | sed "s/%29/\)/g"`
l8=`echo $l7 | sed "s/%2C/\,/g"`
l9=`echo $l8 | sed "s/%3B/\;/g"`
echo $l9 | sed -e 's/%0D%0A/\
/g'
echo "<br><hr>"

Ich liebe diese Syntax ... :ugly:

Dann nochmals vielen Dank an alle, die geholfen haben und einen schönen zweiten Advent.

Gruß, Glenn.

Jinto
06.12.03, 17:54
Mehrere Zeilen geht schon, allerdings brauchst du dafür einen Backslash, der dir allerdings deine mehrzeilige sed-Syntax zerrupft :p

Alternative1: du kannst RegExp mit der awk verwenden, IIRC müsste \n damit funktionieren.
Alternative 2: Du legst die RegEXp in ein File und bindest es auf einen Schlag mit -f ein und brauchst damit auch nciht so viele Variablen (schneller ist es vermutlich auch ;) )

HTH