Ich habe eine Datei, die mehrere Zeilen XML enthält. Ich möchte bestimmte Teile der Datei ersetzen. Einige Teile der Datei enthalten Anführungszeichen ( "
), die ich ersetzen möchte. Ich habe versucht , zu entkommen das Anführungszeichen mit \
, aber ich glaube nicht , das ist die Arbeit am Ergebnis meiner Datei basiert.
Hier ist ein Beispiel für einen meiner sed-Befehle:
sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp
Entkommen Sie auf diese Weise Anführungszeichen in einem sed-Befehl oder mache ich etwas falsch?
"text"
durch richtig aus'text'
. Natürlich wird es nichts tun"othertext"
. Zeigen Sie einige Eingabezeilen und die entsprechende unerwünschte Ausgabe an und erklären Sie stattdessen, welche Ausgabe Sie möchten.\"
der richtige Weg, Anführungszeichen im Befehl sed zu umgehen?"
. Ihr Shell-Befehl verwendet jedoch eine Zeichenfolge in doppelten Anführungszeichen und\"
ist dort korrekt. Dassed
Programm siehts/"text"/'text'/ig
als Argument dafür-e
.s/\"text\" /'text'/ig
würde Würde er nur"text"
mit dem Leerzeichen danach finden?sed
das richtige Werkzeug für den Job ist. Vielleicht möchten Sie einen XML-Parser.Antworten:
Zwei Tipps:
Sie können einem einfachen Anführungszeichen innerhalb einer Zeichenfolge mit einfachen Anführungszeichen nicht entkommen. Sie müssen also das Zitat schließen, ein maskiertes Zitat hinzufügen und die Anführungszeichen erneut öffnen. Das heißt :
'foo'\''bar'
, was sich aufteilt als:'foo'
zitiertfoo
\'
entkam'
'bar'
zitiertbar
Nachgeben
foo'bar
./
in sed verwenden. Ich finde, dass die Verwendung/
und\
im gleichen sed-Ausdruck das Lesen erschwert.So entfernen Sie beispielsweise die Anführungszeichen aus dieser Datei:
In Anbetracht meiner beiden obigen Tipps lautet der Befehl, mit dem Sie sowohl doppelte als auch einfache Anführungszeichen entfernen können:
Basierend auf meinem ersten Tipp reduziert die Shell das zweite Argument von sed (dh die Zeichenfolge nach dem
-e
) aufs|["']||g
und übergibt diese Zeichenfolge an sed. Basierend auf meinem zweiten Tipp behandelt sed dies genauso wies/['"]//g
. Es bedeutetSie brauchen wahrscheinlich etwas Komplexeres, um das zu tun, was Sie wollen, aber es ist ein Anfang.
quelle
'foo'\''bar'
, könnten wir verwenden'foo'"'"'bar'
.Ich habe einen Windows-Port mit Unix-Dienstprogrammen, sodass Befehle etwas anders aussehen, aber ich hatte eine CSV-Datei mit Kommas und Anführungszeichen. Mit diesem Thread als Leitfaden konnte ich die Anführungszeichen über diesen Befehl entfernen:
quelle