Wie kann ich Zeilenumbrüche aus allen zitierten Textteilen in einer Datei entfernen?

  • Ich habe eine CSV-Datei aus einer Datenbank exportiert. Bestimmte Felder sind längere Textblöcke und können Zeilenumbrüche enthalten. Was wäre der einfachste Weg, nur Zeilenumbrüche aus dieser Datei zu entfernen, die in doppelten Anführungszeichen stehen, aber alle anderen beibehalten?

    Es ist mir egal, ob eine Bash-Befehlszeile verwendet wird Liner oder ein einfaches Skript, solange es funktioniert.

    Zum Beispiel:

     "Value1", "Value2", "This is a longer piece
        of text with
        newlines in it.", "Value3"
    "Value4", "Value5", "Another value", "value6"
     

    Die Zeilenumbrüche im längeren Text sollten entfernt werden, nicht jedoch die Zeilenumbrüche zwischen den beiden Zeilen.

    22 November 2011
    davidscolgan
3 answers
  • Hier ist eine Lösung in Python:

     import re
    pattern = re.compile(r'".*?"', re.DOTALL)
    print pattern.sub(lambda x: x.group().replace('\n', ''), text)
     

    Online-Arbeit: ideone

    22 November 2011
    Mark Byers
  • In Python:

     import csv
    with open("input.csv", "rb") as input, open("output.csv", "wb") as output:
        w = csv.writer(output)
        for record in csv.reader(input):
            w.writerow(tuple(s.remove("\n") for s in record))
     
    22 November 2011
    Sven Marnach
  • Dies ist sehr simpel, kann jedoch für Sie funktionieren:

     # cat <<\! | sed ':a;/"$/{P;D};N;s/\n//g;ba'                            
    > "Value1", "Value2", "This is a longer piece
    >     of text with
    >     newlines in it.", "Value3"
    > "Value4", "Value5", "Another value", "value6"
    > !
    "Value1", "Value2", "This is a longer piece    of text with    newlines in it.", "Value3"
    "Value4", "Value5", "Another value", "value6"
     
    22 November 2011
    potong