2017-02-05 3 views
0

Ich habe die unten angegebenen Daten mit anderen Zeilen von Daten in einer riesigen Datei, um genauer zu sein ist dies eine .json-Datei, habe ich die ganze Datei ausgenommen für diese Fang.Ersetzen Sie doppelte Zitate Komma Separator in Brackets [] mit sed

Daten:

  • , "Wert": [ "ABC-DE", "XYZ-MN"]
  • , "Wert": [ "MNO-RS"], "sub_id ": 01
  • " Wert ":" [\ "NEW-XYZ \"] ","
  • , "Wert": ["ABC-DE", "XYZ-MN", "MNO-BE", "FRS-ND"]

Ich möchte, dass die Daten so aussehen

  • , "Wert": [ "ABC-DE, XYZ-MN"] - Changed
  • , "Wert": [ "MNO-RS"], "sub_id": 01-Unverändert
  • " Wert ":" [\ "NEW-XYZ \"] "," - Unchained
  • , "Wert": ["ABC-DE, XYZ-MN, MNO-BE, FRS-ND"] - Geändert

Bisher habe ich dieses Stück Code jedoch scheint es, die ganzen Dateien zu ersetzen „“ mit, und nicht das, die nur innerhalb von []

sed 's/\(\[\|\","\|\]\)/\,/g' testfile_1.txt >testfile_2.txt 
Bearbeitet vierte Bedingung

Prost:

Jede Hilfe wäre

** Hinweis groß sein.

+0

Die quantifiers, +, {n}, {n, m} und {n, } Wiederholen Sie den vorhergehenden Token Null oder einmal, einmal oder mehrmals, n Mal, zwischen n und m mal, und n oder mehrmals, – clearlight

+0

sed Standardwerte für BRE: Das Standardverhalten von sed ist die Unterstützung von Basic Regular Expressions (BRE). Um erweiterte Funktionen zu verwenden, setzen Sie das Flag -r (Linux) oder -E (BSD) auf ERE. – clearlight

+0

Eine andere Sache, die mir aufgefallen ist, dass Sie mehrere sed Pässe versuchen könnten. Wie eins, um alle Anführungszeichen zu entfernen, dann ein anderer sed Durchlauf, um sie zurück hinzuzufügen, wo benötigt? (mit anderen Worten, verketten). Ich weiß nicht, ob das effektiver ist oder nicht, trotzdem danke nochmal. Viel Glück! – clearlight

Antwort

1

Das ist härter ohne die nicht gierigen passenden Perl-Regex-Angebote, aber das scheint es zu tun.

sed -e 's/\([^\[]*\"[A-Z\-]*\)\",\"\(.*\)/\1,\2/' 
+0

Danke @clearlight, aber ich habe einen Weg gefunden, es auf die traditionelle Art und Weise zu tun;) – Avin

+0

Dies ist eine traditionelle POSIX-Regex, nicht perl. Was war deine Lösung? Können Sie Ihre Frage aktualisieren? Auch wenn meine Antwort gut ist, klicken Sie bitte auf √ Häkchen daneben. Vielen Dank! – clearlight

+0

Entschuldigung, ich meine, kannst du deine Antwort hinzufügen, damit wir eine andere Lösung sehen können? Oder mit traditionell meinst du nicht-Regex? – clearlight

0

Vielen Dank für Ihre Beiträge @clearlight

Hier ist meine Lösung für das Problem mit mehreren Vorkommen;

sed -e ': a' -e 's/\(\[[^]]*\)","/\1,/' -e 't a' testfile_1.txt >testfile_2.txt 

Mit Etikett 'a' bis Ende des Labels 'a'

Pseudo-Code:

while (not end of line){ replace "," with ' }