2017-05-05 3 views
0

Ich verarbeite eine XML-Datei mit sed. Der Inhalt der zu ersetzenden Datei ist unten aufgeführt.Force sed, um Leerraum zu ignorieren

<NS1:myService> 
    <NS1:code>1</NS1:code> 
    <NS1:timestamp>Event_Time_Stamp</NS1:timestamp> 
    <NS1:log> 
     <NS1:logLevel>some_level</NS1:logLevel> 
     <NS1:loggerName>log_back</NS1:loggerName> 
     <NS1:message>loggable_message</NS1:message> 
      <NS1:node>none</NS1:node> 
      <NS1:host>my_host</NS1:host> 
    </NS1:log> 
</NS1:myServices> 

Ich muss den Inhalt des Knotens mit dem my Text ersetzen. Es funktioniert jedes Mal, wenn Variable, die meinen Text enthält, KEINE Leerzeichen enthält. Sobald es Platz gibt sed wirft einen Fehler aus.

sed: -er Ausdruck # 1, char 120: ungekündigten Befehl s `

Hier ist, wie ich meine Nachricht in meinem Skript erstellen

text="APPLICATION:\t\t$app\n" 
text=$text"RECEIVER:\t\t$receiver\n" 
text=$text"LOGGABLE MESSAGE:\t$message\n" 
text=$text"SENDER:\t\t$sender\n" 
text=$text"DATE CREATED:\t$created\n" 

verwende ich die folgende sed Anweisung, um meine Ersetzungen zu tun

sed -i 's|<NS1:message>.*<|<NS1:message>'$text'<|g' $workfile 

Allerdings bricht der oben genannte Befehl jedes Mal auf Raum . Wie kann ich Leerraum entkommen, so dass sed es wie jeden anderen Charakter verarbeiten würde?

+3

Verwenden sehen einen XML-Parser (xmlstarlet, zum Beispiel). – Cyrus

+0

Wenn ich XML-Parser verwenden, könnte ich darüber gefragt haben würde, aber ich brauche zu verwenden, sed Aber danke für den Versuch. – svager

+0

@svager Warum brauchen Sie sed? – 123

Antwort

1

Sobald ich die Frage gepostet habe, habe ich es herausgefunden. Ich brauchte yo Verwendung "

Befehle wie dieses

sed -i 's|<NS1:message>.*<|<NS1:message>'"$text"'<|g' $workfile 
Verwandte Themen