(gelöst) spaces durch Komma ersetzen, aber nicht wenn nur ein space

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
medias
Beiträge: 76
Registriert: 18.05.2014 11:21:43

(gelöst) spaces durch Komma ersetzen, aber nicht wenn nur ein space

Beitrag von medias » 10.08.2018 12:22:23

Ich bin dabei eine *.pdf in eine *.csv Datei zu konvertieren. Wobei ich die pdf zunächst in eine txt wandle um danach daraus eine csv zu machen. Leider schaffe ich es nicht die spaces richtig zu wandeln.

Die einzelnen Spalten sind bei der Umwandlung von der pdf zu einer txt Datei durch spaces getrennt. Von Spalte zu Spalte sind es immer mehr als 2 spaces Zwischenraum. Da steht nie nur ein einzelnes space. Leider habe ich aber Felder mit einem Inhalt wie Müller / Hameln, wo vor und nach dem / jeweils ein einzelner space liegt. Diese spaces möchte ich jedoch erhalten.

Mit

sed -e "s/[[:space:]]\+/,/g" output-layout.txt > ergebnis.csv

oder besser

tr -s ' ' < output-layout.txt | tr ' ' ',' > ergebnis.csv

kann ich beliebig viele spaces in ein einzelnes Komma umwandeln. Leider ergibt das auch Müller,/,Hameln. Wie schaffe ich es, das nur zwei und mehr spaces zu einem einzelnen Komma umgewandelt werden?

Ja, ich könnte jetzt Müller / Hameln via sed zu Müller+/+Hameln umwandeln und später wieder zu Müller / Hameln rückwandeln, aber das möchte ich nicht.
Zuletzt geändert von medias am 10.08.2018 13:24:17, insgesamt 1-mal geändert.

Benutzeravatar
heisenberg
Beiträge: 1348
Registriert: 04.06.2015 01:17:27

Re: spaces durch Komma ersetzen, aber nicht wenn nur ein space

Beitrag von heisenberg » 10.08.2018 12:56:17

sed --regexp-extended -e "s/[[:space:]]{2,}/,/g" output-layout.txt > ergebnis.csv

Nettes deutsches Tutorial für Regex
https://danielfett.de/de/tutorials/tuto ... ausdrucke/

medias
Beiträge: 76
Registriert: 18.05.2014 11:21:43

Re: spaces durch Komma ersetzen, aber nicht wenn nur ein space

Beitrag von medias » 10.08.2018 13:23:37

Super @heisenberg, danke!

tobo
Beiträge: 563
Registriert: 10.12.2008 10:51:41

Re: spaces durch Komma ersetzen, aber nicht wenn nur ein space

Beitrag von tobo » 10.08.2018 13:32:39

medias hat geschrieben: ↑ zum Beitrag ↑
10.08.2018 12:22:23
Wie schaffe ich es, das nur zwei und mehr spaces zu einem einzelnen Komma umgewandelt werden?
Die Zeichenklasse [:space:] umfasst neben einem Leerzeichen noch andere Leerraumzeichen (Tabulator, Zeilenumbruch, Formfeed, Rücklauf, vertikal Tab [\t\n\f\r\v]). :[blank:] mit Leerzeichen und Tabulator wäre näher, aber auch das ist ja schon zuviel. \+ bedeutet 1 oder mehr, du willst zwei oder mehr. Extended Regex ermöglicht die Zeichen {}+ ohne vorangestellten \ zu übergeben.

Code: Alles auswählen

sed 's/  \+/,/g'
//bzw.
sed 's/   */,/g'
//oder aber
sed 's/ \{2,\}/,/g'

Antworten