Zum Inhalt springen

[sed] Entfernen von Leerzeichen in einer Datei


Carwyn

Empfohlene Beiträge

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. :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...