Hallo Liste, ich hätte eine konkrete und eine allgemeine Frage: In einer Textdatei möchte ich in dieser Reihenfolge: - alle führenden Leerzeichen in den Zeilen entfernen - alle Zeilenumbrüche durch Tabulatoren ersetzen - alle "----" durch Zeilenumbrüche ersetzen Wie geht das mit sed? Und vor allem: wo gäbe es eine Quelle, wo ich sowas nachlesen könnte? man sed war da nicht so erhellend für mich. Danke+Gruß. -- Antworten an lists@feile.net werden in /dev/null archiviert! Bitte ggf. lists... durch mail... ersetzen. Andreas Feile www.feile.net
Am Donnerstag, 3. März 2005 14:36 schrieb Andreas Feile:
Hallo Liste,
ich hätte eine konkrete und eine allgemeine Frage:
In einer Textdatei möchte ich in dieser Reihenfolge:
- alle führenden Leerzeichen in den Zeilen entfernen - alle Zeilenumbrüche durch Tabulatoren ersetzen - alle "----" durch Zeilenumbrüche ersetzen
Wie geht das mit sed?
Ja, es geht z.B. so (ungetestet): sed {"s/^[\s]+//g;s/[\n]/[\t]/g;s/----/[\n]/g} datei.txt
Und vor allem: wo gäbe es eine Quelle, wo ich sowas nachlesen könnte? man sed war da nicht so erhellend für mich.
http://www.linuxfibel.de/sed.htm und bei RegEx ist der kregexpeditor für einen Anfänger durchaus hilfreich. -- Gruß MaxX Bitte beachten: Diese Mailadresse nimmt nur Listenmails entgegen. Für PM bitte den Empfänger gegen den Namen in der Sig tauschen. Auch sehr interessant: http://www.suse-etikette.de.vu
Hallo, Am Thu, 03 Mar 2005, Matthias Houdek schrieb:
Am Donnerstag, 3. März 2005 14:36 schrieb Andreas Feile:
ich hätte eine konkrete und eine allgemeine Frage:
In einer Textdatei möchte ich in dieser Reihenfolge:
- alle führenden Leerzeichen in den Zeilen entfernen - alle Zeilenumbrüche durch Tabulatoren ersetzen - alle "----" durch Zeilenumbrüche ersetzen
Wie geht das mit sed?
Ja, es geht z.B. so (ungetestet):
sed {"s/^[\s]+//g;s/[\n]/[\t]/g;s/----/[\n]/g} datei.txt
Aeh, hallo!?!? Was soll das machen? Was sollen die {}? was das vereinsamte '"'? Was die Zeichenklassen im Ersetzungstext? Und sed kennt kein '\s'. Und sed liest normal immer genau _eine_ Zeile, kann also Zeilenumbrueche so nicht ersetzen. Dazu muss man "tricksen" und mehrere Zeilen einlesen und erst dann ersetzen: ==== ./change_whitespace.sed ==== #!/usr/bin/sed -nf # ACHTUNG: Nur minimal getestet s/^[[:space:]]*//g :cont N s/^[[:space:]]*//g /----/ { bsubs; } bend :subs s/\ / /g; s/----/\ /g; s/\ [[:space:]]*/\ /g p x :end bcont ==== $ chmod u+x ./change_whitespace.sed $ echo ' a aa b ---- ccc dd ---- eeee' | ./change_whitespace.sed a aa b ccc dd eeee HTH, -dnh -- I know not with what weapons World War III will be fought, but World War IV will be fought with sticks and stones. -- Albert Einstein
participants (4)
-
Andreas Feile
-
David Haller
-
Matthias Houdek
-
Peter Wiersig