SED - Hochkommar und Umlaute

P

p4tr1ck

Grünschnabel
Hallo,

erst mal ein Lob an das Forum, was mir bei einigen Themen schon weiter helfen konnte.

Ich habe folgendes Problem:

Ich habe ein SED Kommando, was in XML Dateien (Zeile 16) verschiedene Texte einfügt:

cat /home/xml/12345.xml | sed '16i<text><![CDATA[Hello World]]></text>'

Das Funktioniert auch wunderbar.
Allerdings wenn Hochkommar (') oder Umlaute dazu kommen, funktioniert es nicht mehr bzw. es kommen komische Zeichen raus. Beim Hochkommar ist es klar, da das Kommando dann mittendrin unterbrochen wird. Ich habe schon versucht, die Hochkommar durch Backslash zu ignorieren, funktioniert aber nicht :(

Hat jemand ein Tipp für mich, wie ich das SED Kommando anpassen muss, dass Hochkommar (') und Umlaute richtig übernommen werden.

Danke

Grüße
Patrick
 
Versuch doch mal, 'cat' zu vermeiden:
Code:
sed '16i<text><![CDATA[Hello World]]></text>' /home/xml/12345.xml
Dann duerfte der Inhalt der Datei direkt von sed und nicht mehr von der shell interpretiert werden.
 
Danke für deine Antwort.

Habe nun folgendes gemacht:
sed '16i<text><![CDATA[Hello Wöäürld]]></text>' /home/xml/12345.xml >> /tmp/12345.xml

Ergebnis:
<text><![CDATA[Hello W���rld]]></text>
Im Texteditor sind die Fragezeichen => Vierecke.

Wenn ein Hochkommar im CDATA ist, muss ich davor ein backslash setzen?

Grüße
Patrick
 
Danke für deine Antwort.

Habe nun folgendes gemacht:
sed '16i<text><![CDATA[Hello Wöäürld]]></text>' /home/xml/12345.xml >> /tmp/12345.xml

Ergebnis:
<text><![CDATA[Hello W���rld]]></text>
Im Texteditor sind die Fragezeichen => Vierecke.

Wenn ein Hochkommar im CDATA ist, muss ich davor ein backslash setzen?

Grüße
Patrick

Was für ein Editor benutzte du denn? Sieht nach einem Encoding Problem aus, das er nicht mit den Deutschen Umlauten umgehen kann. Hast du auch schon versucht diese in der Bash mittles cat (ja nun wieder cat) dir anzeigen zu lassen?
Was sagt dir denn ein
Code:
locale

so far
MFG 4k3nd0
 
# locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"

Editor: Notepad++
Direkt in der Shell wird es auch so dargestellt.
 
Vielleicht ist die Ausgangsdatei ja schon anders kodiert.
Was sagt denn:
Code:
file /home/xml/12345.xml
file /tmp/12345.xml
Und was bedeutet "direkt in der Shell"? cat / less / more ???
Gruß zst
 
file /home/xml/12345.xml - 12345.xml: XML document text
file /tmp/12345.xml - 12345.xml: XML document text

Auf der Shell meine ich z.B. mit "nano".

Wenn ich den Text mit Umlauten manuell einfüge, ist der Text OK.
Wenn ich es automatisch mit SED mache, kommt mist raus und die Hochkomma mit einem Backslash ignorieren zu lassen, funktioniert auch nicht.
 
Code:
sed   [COLOR="red"]"[/COLOR]16i\<text\>\<\!\[CDATA\[\'Hello World\'\]\]\>\<\/text\>[COLOR="red"]"[/COLOR]  /tmp/12345.xml
 
In was fuer einer Umgebung arbeitest Du, wenn Du notepad++ benutzt - Cygwin unter Windows oder so? Vielleicht liegt es ja daran. Was ist denn die Version von sed, also die Ausgabe von
Code:
 sed --version
Unter Debian stable funktioniert das ganze recht prima. Ansonsten kannst Du auch mal versuchen, Deine Sprache auf C zu setzen:
Code:
 export LC_ALL="C"
Manchmal hilft das auch.
 
Zurück
Oben