Ersetzen fälschlicherweise maskierter Anführungszeichen durch sed

Ersetzen fälschlicherweise maskierter Anführungszeichen durch sed

Ich muss eine sehr große CSV-Datei bereinigen, die fälschlicherweise doppelte Anführungszeichen ( \\"statt \") enthält. Wie kann ich alle Instanzen von ersetzen?

\\"
\\\"
\\\\"
.....

mit \"oder nur Platz?

Da dies der Fall ist, \habe ich diese Frage gestellt, um das Chaos nicht noch weiter zu vergrößern.

Antwort1

Das hier sollte reichen:

sed 's/\\\\*"/\\"/'

Dies ersetzt einen Backslash ( \\), gefolgt von einer beliebigen Anzahl von Backslashs ( \\*) und einem doppelten Anführungszeichen ( "), durch einen Backslash, gefolgt von einem doppelten Anführungszeichen ( \\"). Verwenden Sie sed 's/\\\\*"/\\"/g', um alle Vorkommen in einer Zeile zu ersetzen.

Antwort2

Eine Alternative, wenn Ihr seddie Option für erweiterte reguläre Ausdrücke unterstützt -E(hierbei wird die Anzahl der Backslashes nicht mitgezählt):

sed -E 's/[\]+"/\\"/g' file

verwandte Informationen