Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Wie Löschen bis Zeilenende ab einem bestimmten Zeichen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120

    Question Wie Löschen bis Zeilenende ab einem bestimmten Zeichen?

    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?

  2. #2
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hallo,

    das geht so:
    Code:
    echo "Test test test. Bla bla bla"|sed -r 's/([^\.]*)\..*/\1/'
    . Eventuell ist auch noch die Option -i für dich interessant.

    Gruß, Florian
    Ein gebrechlich Wesen ist der X-Server.

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    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?

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    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.

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

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    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?

  6. #6
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    Nachtrag:

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

    liefert das gewünschte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •