grep nach Datum

Dieses Thema im Forum "Linux & BSD" wurde erstellt von übertreiber, 1. Juli 2011 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 1. Juli 2011
    Hi!
    Ich versuche gerade verzweifelt aus einer Datei alle Datumsangaben mit grep/egrep herauszufiltern.
    Soll so aussehen:
    TT.MM.[JJ]JJ

    Meine Abfrage sieht so aus:
    egrep '[0-3]+[0-9]+\.[0-1]+[0-9]+\.[0-9]*[0-9]*[0-9]+[0-9]+' testdatei.txt -n -w

    Damit erkennt er schonmal alle Datumsangaben.
    Allerdings findet er auch dieses hier:
    10.10.10.0

    Dieses .0 erkennt er wohl als neues Wort. Habe dann versucht mit [^\.] am Ende das zu verbieten, klappt aber irgendwie nicht.

    Was tun? Habe keine Ahnung wie ich diesen Fall verbieten kann, vorallem da -w das ja eigentlich bereits tun sollte.
     
  2. 1. Juli 2011
    AW: grep nach Datum

    Ich bin kein grep Experte aber ist das nicht die falsche Syntax?


    grep [OPTIONS] PATTERN [FILE...]
     
  3. 1. Juli 2011
    AW: grep nach Datum

    Reihenfolge ist wayne...


    sagich@net:/$ echo 10.10.10|egrep '^[0-3][0-10].[0-1][0-9].[0-9][0-9]$'
    10.10.10
    sagich@net:/$ echo 10.10.10.1|egrep '^[0-3][0-10].[0-1][0-9].[0-9][0-9]$'
    sagich@net:/$
     
  4. 1. Juli 2011
    AW: grep nach Datum

    egrep is deprecated: man sollte grep -E nutzen.

    grep -n -E "[0-3][0-9]\.[0-9][0-9]\.([0-9][0-9])?[0-9][0-9]" [filename]

    Zur Erklärung, was du falsch gemacht hast:
    [0-3]+ <- das heißt mindestens einmal, oder öfter. Jedoch willst du das ja nur einmal haben. Davon abgesehen, dass (wenn ichs richtig im kopf hab) die "quantoren" (+,*,?) immer hinter geklammerte (runde klammern) Gruppen gehoeren.

    [0-9]* <- das heißt garnicht bis beliebig oft. Ich denke ([0-9][0-9])? triffts besser (entweder garnicht, oder einmal beide.)

    Edit:
    @Erazor:
    Deine Lösung funktioniert für dein Beispiel wunderbar, jedoch ist der optionale Fall, dass das Jahr aus vier Zeichen besteht nicht abgedeckt. ^ und $ sind in deinem Beispiel zwar ganz nützlich, funktionieren aber natürlich nur bei Zeilen, welche eben nur ein Datum enthalten.

    Falls Übertreiber nur das Datum herausfiltern will, kann er dafür aber natürlich den -o switch anhängen.
     
  5. 1. Juli 2011
    AW: grep nach Datum

    Funktioniert nicht, kommt irgendwie gar nichts mehr raus.
    Funktioniert leider auch nicht.
    Er gibt mir immernoch 10.10.10.0 aus. Ohne -w Switch kommt sogar noch eine andere Nummer:
    11.111.11.111 (andere Zahlen, aber halt von dem Format).

    Ist auch keine alte grep/egrep Version, Ubuntu 11.04
     
  6. 1. Juli 2011
    AW: grep nach Datum

    Code:
    grep -E "[0-3][0-9]\.[0-9][0-9]\.([0-9][0-9])?[0-9][0-9][^0-9|^\.]" -o
    
    Nun matched er nur, wenn nach den Jahreszahlen keine weitere zahl, oder kein Punkt mehr kommt. Versuch mal, ob es das ist, was du brauchst.


    Edit:

    Gegebenfalls musst du das auch noch so bauen:
    Code:
    grep -E "[^0-9|^\.][0-3][0-9]\.[0-9][0-9]\.([0-9][0-9])?[0-9][0-9][^0-9|^\.]" -o
    
     
  7. 1. Juli 2011
    AW: grep nach Datum

    Nein, jetzt fehlen irgendwie haufenweise Jahreszahlen.
    Dieses [^\.] am Ende habe ich auch probiert, das zerstört irgendwie alles. Sobald das drin ist, werden haufenweise Daten ausgelassen.
    Beispielsweise findet er dann ein Datum in einer einzelnen Zeile mit sonst nichts nicht mehr.
     
  8. 1. Juli 2011
    AW: grep nach Datum

    Ich Frag mal anders: Was kann denn alles vor und nach einem Datum kommen ? Nur leerzeichen ? Leerzeichen oder nichts ?

    Edit:
    Ich geh mal einfach von aus, dass vor einem gültigen Datum nichts steht (Zeilen-Anfang) oder ein Leerzeichen. Nach einem Datum kommt entweder auch nichts mehr, oder Leerzeichen.


    Code:
    grep -E "( |^)[0-3][0-9]\.[0-9][0-9]\.([0-9][0-9])?[0-9][0-9]( |$)" -o | sed 's/ //g'
    
    Das sed entfernt die Leerzeichen, sofern du die nicht willst.

    Edit2:
    Wäre natürlich gut, wenn man einfach deine testdaten haben könnte.
     
  9. 1. Juli 2011
    AW: grep nach Datum

    Bei denen die beim letzten mal ausgelassen werden: gar nichts. Ist am Anfang der Zeile und danach ist direkt ein Zeilensprung, kein Leerzeichen. Bei denen die der letzte noch ausgegeben hat waren ein Leerzeichen jeweils davor und dahinter.

    edit:
    Dein edit funktioniert! Vieeeeeeeelen Dank! grep macht einen echt fertig nach ner Zeit
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.