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?
Verwenden sehen einen XML-Parser (xmlstarlet, zum Beispiel). – Cyrus
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
@svager Warum brauchen Sie sed? – 123