Zum Inhalt springen

[sed] Entfernen von Leerzeichen in einer Datei


Empfohlene Beiträge

Geschrieben

Hallo,

keine Ahnung, ob ich hier richtig bin, oder das eher irgendwo in die Algorithmik gehört, aber ein Mod kann's ja ggf. verschieben. Vorweg, ich habe mich bis gestern mit sed nie beschäftigt, also verzeiht wenn ich als Anfängerin da Dinge übersehe.

Ich habe mir eine Datei aus einer Datenbank heraus erstellen lassen, die in etwa folgendermaßen aussieht:

SQL>

SQL>    SELECT MITARBEITER, VORNAME, NAME FROM Tabelle;

^LMITARBEITER;VORNAME                                 ;NAME

       <ID>;<Vorname>                               ;<Name>

       <ID>;<Vorname>                               ;<Name>

       <ID>;<Vorname>                               ;<Name>

[Noch gaaaaanz viele Datensätze]

SQL>

SQL> SPOOL OFF
Daraus soll mal, wenn sie groß ist, eine simple csv-Datei werden mit ausschliesslich nur noch:
<ID>;<Vorname>;<Name>

<ID>;<Vorname>;<Name>

<ID>;<Vorname>;<Name>

<ID>;<Vorname>;<Name>

[Wieder irre viele Datensätze]

Jetzt habe ich bereits herausgefunden, wie ich mit sed die ersten und letzten Zeilen + Tabellenkopf entferne, so dass ich nur noch die Datensätze sehe und wie ich die ersten Leerzeichen trimme, so dass die ID direkt am Zeilenanfang steht. Nun stehe ich aber vor dem Problem, dass ich die weiteren Bereiche der Zeilen noch trimmen will.

Das Beispiel oben ist nur mit drei Spalten. Das können natürlich unterschiedlich viele sein. Ich brauche also eine Idee, wie ich sed sagen kann:

  • Gehe zum ersten Semikolon
  • Gehe dann zurück zum Wortende des letzten Wortes (Kann ja auch sein, das der Name oder ein anderer Datensatz aus mehr Worten besteht und Leerzeichen enthält)
  • Lösche alle in diesem Zwischenraum liegenden Leerzeichen
  • Wiederhole diese Schritte bei allen weiteren Semikolons (-kolen?), bis Du am Zeilenende angekommen bist

Bisher habe ich nur Beispiele gefunden, wie ich Leerzeichen am Anfang einer Zeile lösche und am Ende. Aber nicht mitten drin.

Was ich rausfand war, dass es ein positive lookbehind gibt, d.h. dass ich mit (?<=\B) eigentlich sagen können müsste "Gehe zurück zum letzten Wortende". Nur wie sag ich ihm von wo und - vor allen Dingen - wie sage ich ihm quasi als Schleife (while Zeilenende = false...do), dass er das beständig bis zum Zeilenende wiederholen soll?

Hat einer eine Idee? Eigentlich klingt das nach ner super Übungsaufgabe für sed, aber bisher habe ich wie gesagt nur gefunden, dass ich mit

sed -e 's/^[ \t]*//'

die Anfangszeilen trimmen kann und mit

sed 's/^[ \t]*//;s/[ \t]*$//'

das am Anfang wie auch am Ende machen kann. Dazwischen ist mir aber weit wichtiger. *g*

Vielen Dank schonmal im Voraus. :)

Geschrieben

Nur die Leerzeichen zwischen Datensatz und Semikolon ("<Datensatz><ganz viel whitespace>;<Datensatz><ganz viel whitespace>;" soll zu "<Datensatz>;<Datensatz>;" werden). Eben genau nicht die Leerzeichen in den Datensätzen selber.

Geschrieben

Ich kenn mich jetzt nicht mit sed aus, aber wenn es nicht sed sein muss, sondern auch perl geht, würde folgendes deine Leerzeichen entfernen:

perl -e 'while(<STDIN>) { [B]s/(?<=\s+(?=([^;]+))//g[/B]; print; }'[/CODE]




Wobei die Daten über die Standardeingabe übergeben werden, zum Beispiel folgendermaßen:

[CODE]cat <DATEI> | <Perlaufruf>

Andererseits kannst du vll auch den RegExp (fett makiert) für sed benutzen.

Geschrieben (bearbeitet)

cat [DATEI1] | sed 's/> *;/>;/g' | sed 's/^ *</</' > [DATEI2]

So könnte man das mit sed machen.

Bearbeitet von bummel

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...