PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie Löschen bis Zeilenende ab einem bestimmten Zeichen?



Linus
25-04-2009, 09:11
In einer Text-Datei benötige ich tausende Zeilen ab einem bestimmten Zeichen, aktuell ".", bis zum Zeilende abgeschnitten, d. h. Löschen beginnend mit dem bestimmten Zeichen bis zum Zeilenende.
Vermutlich kann man das mit sed machen, aber wie? :confused:

ContainerDriver
25-04-2009, 13:05
Hallo,

das geht so:


echo "Test test test. Bla bla bla"|sed -r 's/([^\.]*)\..*/\1/'

. Eventuell ist auch noch die Option -i für dich interessant.

Gruß, Florian

Linus
25-04-2009, 20:33
Danke, aber wir mir erst jetzt auffällt, ist nicht ab "." sondern ab ". " zu löschen.
Ich habe schon ausprobiert " " oder "\ " hinter die Punkte zu setzen, aber das reicht nicht.
Wie bekommt man es hin ab ". " zu löschen? :confused:

jan61
26-04-2009, 11:46
Moin,

Du hast Dich nicht mit den regulären Ausdrücken befasst - sonst hättest Du gesehen, dass Du das Leerzeichen eben nicht hinter "die" Punkte einfügen musst, sondern dazwischen.


echo "Test test test. Bla bla bla"|sed -r 's/([^\.]*)\. .*/\1/'Nebenbei: Der Ausdruck in Klammern bei ContainerDriver soll dafür sorgen, dass ab dem ersten Punkt gelöscht wird und nicht nach dem letzten - Regex sind gierig und versuchen immer das größte passende Stück zu erwischen. Das ist in diesem Fall aber unnötig kompliziert, man kann es so abkürzen:

jan@jack:~> echo "Test test.test. Bla . bla bla"|sed 's/\. .*//'
Test test.test
Hier wird nur der zu löschende Teil der Zeile definiert und damit - wegen der Gier der Regex - eben der längste Teil der Zeile, der passt.

Jan

P.S.: Ich empfehle dringend das Studium von "man 7 regex", denn ohne ein grundlegendes Verständnis von regulären Ausdrücken wirst Du nicht weit kommen.

Linus
26-04-2009, 13:50
Danke für die Tipps, aber mir ist aufgefallen, das diese neue Lösung auch nicht funktioniert: In der betreffenden Datei sind gar keine Leerzeichen sondern Tabs; ich brauche einen regulären Ausdruck der für alle Whitespaces funktioniert :rolleyes:

Wie bekomme ich alles ab ".<whitespace>" bis zum Zeilenende gelöscht? :confused:

Linus
26-04-2009, 14:00
Nachtrag:

sed 's/\.[[:space:]].*//'

liefert das gewünschte :)