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?
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?
Hallo,
das geht so:
. Eventuell ist auch noch die Option -i für dich interessant.Code:echo "Test test test. Bla bla bla"|sed -r 's/([^\.]*)\..*/\1/'
Gruß, Florian
Ein gebrechlich Wesen ist der X-Server.
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?
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.
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:Code:echo "Test test test. Bla bla bla"|sed -r 's/([^\.]*)\. .*/\1/'
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.Code:jan@jack:~> echo "Test test.test. Bla . bla bla"|sed 's/\. .*//' Test test.test
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.
Linux + Software:
http://www.jan-trippler.de/de/index.html
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
Wie bekomme ich alles ab ".<whitespace>" bis zum Zeilenende gelöscht?
Nachtrag:
sed 's/\.[[:space:]].*//'
liefert das gewünschte
Lesezeichen