![](https://seccdn.libravatar.org/avatar/36545824f598e466583a81e838e79f14.jpg?s=120&d=mm&r=g)
Hi, irgendwie steh ich auf dem Schlauch, dabei scheint das Problem nicht so selten: Ich habe eine CSV-Datei und weil manche Leute es fertigbringen in Excel Newlines in die Tabellenfelder zu machen, habe ich da solche netten Strings: ...;voriges Feld;"Feld mit Linefeed geht hier weiter";nächstes Feld;... habe gedacht, sed könnte das richten: sed -e 's/\(;"[^";]+\)$/\1/g' <file.csv >file.corr passt aber nicht, lässt die Datei unverändert. Sieht jemand, was ich nicht sehe? Thx für jeden Hinweis -- cu jth
![](https://seccdn.libravatar.org/avatar/532395ce3df13ebf76fde4e1f1d28fbc.jpg?s=120&d=mm&r=g)
Am 08.11.21 um 15:25 schrieb Jörg Thümmler:
Hi,
irgendwie steh ich auf dem Schlauch, dabei scheint das Problem nicht so selten: Ich habe eine CSV-Datei und weil manche Leute es fertigbringen in Excel Newlines in die Tabellenfelder zu machen, habe ich da solche netten Strings:
...;voriges Feld;"Feld mit Linefeed geht hier weiter";nächstes Feld;...
habe gedacht, sed könnte das richten:
sed -e 's/\(;"[^";]+\)$/\1/g' <file.csv >file.corr
passt aber nicht, lässt die Datei unverändert. Sieht jemand, was ich nicht sehe?
Thx für jeden Hinweis
Hallo Jörg, newlines mit sed rauszukriegen scheint irgendwie schwierig. Probiere doch mal tr: tr -d '\n' <file.csv >file.corr " gleichzeitig mit entfernen geht dann so: tr -d '\n' <test | tr -d '"' >test.corr Gruß Klaus
![](https://seccdn.libravatar.org/avatar/36545824f598e466583a81e838e79f14.jpg?s=120&d=mm&r=g)
Am 08.11.21 um 16:09 schrieb funedv@gmx.de:
Am 08.11.21 um 15:25 schrieb Jörg Thümmler:
Hi,
irgendwie steh ich auf dem Schlauch, dabei scheint das Problem nicht so selten: Ich habe eine CSV-Datei und weil manche Leute es fertigbringen in Excel Newlines in die Tabellenfelder zu machen, habe ich da solche netten Strings:
...;voriges Feld;"Feld mit Linefeed geht hier weiter";nächstes Feld;...
habe gedacht, sed könnte das richten:
sed -e 's/\(;"[^";]+\)$/\1/g' <file.csv >file.corr
passt aber nicht, lässt die Datei unverändert. Sieht jemand, was ich nicht sehe?
Thx für jeden Hinweis
Hallo Jörg,
newlines mit sed rauszukriegen scheint irgendwie schwierig. Probiere doch mal tr: tr -d '\n' <file.csv >file.corr
" gleichzeitig mit entfernen geht dann so: tr -d '\n' <test | tr -d '"' >test.corr
Gruß Klaus
Hi & Danke, nee, das ist nicht, was ich suche. Newlines mit sed sind nicht das Problem, mit "$" geht das schon ganz gut. Problem ist, dass nur die Newlines raus sollen, die innerhalb einer Zeichenkette liegen, die von "" umgeben ist, alle anderen sollen bleiben. Solche Zeichenketten entstehen, wenn jemand einen Zeilenvorschub in eine Tabellenkalkulationszelle kopiert und man das in CSV exportiert. -- cu jth
![](https://seccdn.libravatar.org/avatar/638c5f9b9a41e53d4663197a58261c49.jpg?s=120&d=mm&r=g)
Hallo, Am Mon, 08 Nov 2021, Jörg Thümmler schrieb:
irgendwie steh ich auf dem Schlauch, dabei scheint das Problem nicht so selten: Ich habe eine CSV-Datei und weil manche Leute es fertigbringen in Excel Newlines in die Tabellenfelder zu machen, habe ich da solche netten Strings:
...;voriges Feld;"Feld mit Linefeed geht hier weiter";nächstes Feld;...
habe gedacht, sed könnte das richten:
sed -e 's/\(;"[^";]+\)$/\1/g' <file.csv >file.corr ^^ Das ist so keine BRE
Versuch's mal mit: $ sed -e 's/\(;"[^";]\+\)$/\1/g' <file.csv >file.corr ^^^ HTH, -dnh -- /* Identify the flock of penguins. */ linux-2.2.16/arch/alpha/kernel/setup.c
![](https://seccdn.libravatar.org/avatar/07e478bf9f5c979647cd2a1972a0d02d.jpg?s=120&d=mm&r=g)
Am Montag, 8. November 2021, 15:25:59 CET schrieb Jörg Thümmler:
[...] CSV-Datei [...] habe ich da solche netten Strings:
...;voriges Feld;"Feld mit Linefeed geht hier weiter";nächstes Feld;...
habe gedacht, sed könnte das richten:
sed -e 's/\(;"[^";]+\)$/\1/g' <file.csv >file.corr
passt aber nicht, lässt die Datei unverändert. Sieht jemand, was ich nicht sehe?
Zwei Probleme: 1. Das Pluszeichen muss escaped werden. 2. Wenn schon das erste Feld über 2 Zeilen geht, klappt die RegEx nicht 3. sed arbeitet jeweils nur eine Zeile nach der anderen ab. Eine Möglichkeit ist, alle Zeilen der Datei auf einmal einzulesen und dann zu bearbeiten. Hier eine Lösung: sed ':a;N;$!ba;s/\([\n;]"[^";]\+\)\n/\1/g' <file.csv >file.corr Für Erläuterungen zu :a;N;$!ba siehe https://stackoverflow.com/questions/ 1251999/how-can-i-replace-a-newline-n-using-sed Danke für die Frage; sie hat auch mich weitergebracht! Hatto
![](https://seccdn.libravatar.org/avatar/36545824f598e466583a81e838e79f14.jpg?s=120&d=mm&r=g)
Am 08.11.21 um 17:32 schrieb Hatto von Hatzfeld:
Am Montag, 8. November 2021, 15:25:59 CET schrieb Jörg Thümmler:
[...] CSV-Datei [...] habe ich da solche netten Strings:
...;voriges Feld;"Feld mit Linefeed geht hier weiter";nächstes Feld;...
habe gedacht, sed könnte das richten:
sed -e 's/\(;"[^";]+\)$/\1/g' <file.csv >file.corr
passt aber nicht, lässt die Datei unverändert. Sieht jemand, was ich nicht sehe?
Zwei Probleme: 1. Das Pluszeichen muss escaped werden. 2. Wenn schon das erste Feld über 2 Zeilen geht, klappt die RegEx nicht 3. sed arbeitet jeweils nur eine Zeile nach der anderen ab.
Eine Möglichkeit ist, alle Zeilen der Datei auf einmal einzulesen und dann zu bearbeiten. Hier eine Lösung:
sed ':a;N;$!ba;s/\([\n;]"[^";]\+\)\n/\1/g' <file.csv >file.corr
Für Erläuterungen zu :a;N;$!ba siehe https://stackoverflow.com/questions/ 1251999/how-can-i-replace-a-newline-n-using-sed
Danke für die Frage; sie hat auch mich weitergebracht! Hatto
Hi, Danke an Hatto und David, 1. Davids Vorschlag tut nix, wahrscheinlich wg. dem über die Zeile gehen. 2. Hattos Vorschlag löscht viele, aber nicht alle Treffer 3. Hab ich jetzt von Euch aber brauchbare Tipps, um weiterzukommen, ich hoffe, ich kann dann ein Ergebnis posten ;-) Danke -- cu jth
![](https://seccdn.libravatar.org/avatar/36545824f598e466583a81e838e79f14.jpg?s=120&d=mm&r=g)
Am 09.11.21 um 08:41 schrieb Jörg Thümmler:
Am 08.11.21 um 17:32 schrieb Hatto von Hatzfeld:
Am Montag, 8. November 2021, 15:25:59 CET schrieb Jörg Thümmler:
[...] CSV-Datei [...] habe ich da solche netten Strings:
...;voriges Feld;"Feld mit Linefeed geht hier weiter";nächstes Feld;...
habe gedacht, sed könnte das richten:
sed -e 's/\(;"[^";]+\)$/\1/g' <file.csv >file.corr
passt aber nicht, lässt die Datei unverändert. Sieht jemand, was ich nicht sehe?
Zwei Probleme: 1. Das Pluszeichen muss escaped werden. 2. Wenn schon das erste Feld über 2 Zeilen geht, klappt die RegEx nicht 3. sed arbeitet jeweils nur eine Zeile nach der anderen ab.
Eine Möglichkeit ist, alle Zeilen der Datei auf einmal einzulesen und dann zu bearbeiten. Hier eine Lösung:
sed ':a;N;$!ba;s/\([\n;]"[^";]\+\)\n/\1/g' <file.csv >file.corr
Für Erläuterungen zu :a;N;$!ba siehe https://stackoverflow.com/questions/ 1251999/how-can-i-replace-a-newline-n-using-sed
Danke für die Frage; sie hat auch mich weitergebracht! Hatto
Hi,
Danke an Hatto und David,
1. Davids Vorschlag tut nix, wahrscheinlich wg. dem über die Zeile gehen. 2. Hattos Vorschlag löscht viele, aber nicht alle Treffer 3. Hab ich jetzt von Euch aber brauchbare Tipps, um weiterzukommen, ich hoffe, ich kann dann ein Ergebnis posten ;-)
Danke
Hi, ich nochmal, sed ':a;N;$!ba;s/\([\n;]"[^";]\+\)\n/\1/g' <file.csv >file.corr funktioniert in utf8 partiell nicht, aber in latin1 passt es. Jedenfalls ist das der einzige Unterschied, den ich zwischen den beiden Benutzern sehe. Unsere gute alte DB ist nämlich latin1 und damit betreibe ich auch den zugehörigen Konsole-Nutzer in latin1 (putty). Da geht es auf Anhieb mit Hattos Vorschlag. Kopiere ich die gleiche Datei in ein anderes Verzeichnis und mache dort eine utf8-Konsole für den Nutzer (XFCE-Terminal) werden manche Zeichenketten nicht zusammengezogen. Die haben alle Umlaute, die latin1-codiert sind, aber andere haben das auch und werden korrekt zusammengezogen. Weil ich mich in Hattos Code erstmal einarbeiten muss, hatte ich zwischenzeitlich tr "\n" "\t" <file.csv | sed -e 's/\(;"[^";]\+\)\t/\1/g' | tr "\t" "\n" >file.corr probiert (es gibt da keine Tabs drin), das zeigt den gleichen Unterschied zwischen latin1 und utf8. recode l1..u8 < file.csv | sed ':a;N;$!ba;s/\([\n;]"[^";]\+\)\n/\1/g' | recode u8..l1 >file.corr geht dann passenderweise auch in der utf8-Konsole, natürlich auch der Würgaround mit "tr" ich weiß, dass es für Unicode jede Menge gute Gründe gibt... ich finde es trotzdem Sch... ;-) -- cu jth
participants (4)
-
David Haller
-
funedv@gmx.de
-
Hatto von Hatzfeld
-
Jörg Thümmler