mit egrep zeilen suchen die etwas NICHT enthalten

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Nano, 28.02.2008.

  1. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    Hi folgendes problem, wiedermal... ;)

    ich möchte mit egrep nach einer zeile suchen die etwas bestimmtes nicht enthält, dafür wäre der syntax egrep '[^wasichnichtwill]' datei


    z.b Alle zeilen die ein o enthalten aber kein H
    Code:
    egrep 'o.*[^H]'
    
    
    
    
    wo liegt der fehler ?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 28.02.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Code:
    egrep 'o.*[^H]'
    
    
    
    
    Zeigt alle Zeilen an, in denen ein o gefolgt von beliebigen Zeichen gefolgt von nicht H vorkommt.

    Die ganze Zeile untersucht:
    Code:
    egrep '^[^H]*o[^H]*$'
    
    
    
    
    Gruß Wolfgang
     
  4. #3 Nano, 28.02.2008
    Zuletzt bearbeitet: 28.02.2008
    Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    ah ja ich sehe wo das problem lag, danke;)
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    gibt es eine möglichkeit auf diese weise mehrer zeichen in folge auszuschliessen ?

    also quasi analog zu

    Code:
    alle zeilen die asdf nicht enthalten ausgeben :
    
    egrep -v 'asdf' datei
    
    analog in dieser form ( welche so nicht stimmt )
    
    egrep '[^asdf]*' datei
    
    zu schreiben
    [\CODE]
     
  5. #4 Gott_in_schwarz, 29.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    erstmal: die code (eigentlich generell alle hier verwendeten) tags terminiert man mit einem slash, nicht backslash, also: [/code]

    desweiteren: nimm dir nochmal zu herzen, was wolfgang gesagt hat, die regex
    Code:
    [^a]
    ist keine schreibweise für: "a nicht matchen", sondern für "matche ein zeichen, welches kein a ist". klingt gleich, oder? aber beachte: bei der zweiten formulierung wird explizit klar, dass etwas gematcht werden soll, und nicht, dass etwas nicht gematcht werden soll, denn das können regexes (afaik) nicht. negated character classes sind ja auch eigentlich nur kurzschreibweisen.
    Code:
    [^7]
    die character class matcht halt jedes zeichen bis auf eine 7, aber das explizit zu schreiben, wäre recht nervig, deswegen diese abkürzung...

    nunja, es gibt noch lookahead und lookbehind, mit denen man das vielleicht gefrickelt kriegen könnte, aber generell würde ich sagen: das isses nicht wert.

    man könnte auch sowas mit perl machen zb:
    Code:
    cat datei | perl -pe 's/.*(asdf)+.*//sg'
    das würde alle zeilen, in denen "asdf" vorkommt löschen, allerdings um den "umweg" des matchens und dann durch "nichts" substituierens...

    dein code btw:
    Code:
    egrep '[^asdf]* datei
    mal angenommen, der *würde* so funktionieren: der würde dann auf jede zeile matchen, in der ein string vorkommen würde, der nicht auf "asdf" passt, also auch diese zeile zum beispiel:
    das "blasd" könnte gematcht werden, ohne der "negierten" regex "in die quere zu kommen"(wobei das ziemlich theoretisch ist, da reguläre ausdrücke AFAIK so nicht funktionieren..). außerdem sollte man den asterisken (*) niemals isoliert in einer regex verwenden, weil das dann auch leere strings matcht, ...
    aber wie gesagt: denke bei regulären ausdrücken lieber daran, was gematcht werden soll. so ziemlich jedes regex-tool das ich kenne, kann dann diese ergebnisse auch "herausfiltern". also quasi genau was du willst...

    mal 'ne frage: was ist los mit "egrep -v", dass du's nicht benutzen willst? klingt wie für dich geschaffen...

    @ausführungen über reguläre ausdrücke: ich lass mich sehr gerne eines besseren belehren, vielleicht kann man ja doch "nicht matchen"? o:
     
  6. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    erstmal danke für die antwort.

    mit egrep -v ist nichts los damit funktioniert es ja, tortzdem kann es ja gut sein das es mehrere möglichkeiten gibt und es interessierte mich einfach ob es eine möglichkeit gibt mit dem regex selbst die -v version zu ersetzen ;)
     
Thema: mit egrep zeilen suchen die etwas NICHT enthalten
Besucher kamen mit folgenden Suchen
  1. regex zeile enthält nicht

    ,
  2. grep zeilen die nicht enthalten

    ,
  3. egrep ja antwort

    ,
  4. regex suche nach zeilen die ein wort nicht enthalten
Die Seite wird geladen...

mit egrep zeilen suchen die etwas NICHT enthalten - Ähnliche Themen

  1. grep / egrep auf das Zeilenende?

    grep / egrep auf das Zeilenende?: Hallo, ich muß per shell script text files untersuchern. hierbei ist der zeilenanfang (^..xyz) und das zeilenende ($ ...???aber wie) wichtig...
  2. Rausfiltern mit egrep?

    Rausfiltern mit egrep?: hiho, habe mal wieder ein Problem. Habe ein Script welches mir ein Logfile auf Fehler überprüft. Leider erzeugt das Programm, welches die...
  3. durch welchen befehl bekomme ich bei egrep die Original Datei edtiert

    durch welchen befehl bekomme ich bei egrep die Original Datei edtiert: durch welchen befehl bekomme ich bei egrep die Original Datei edtiert? bei sed ist es ja: sed -i bei egrep auch möglich? Danke...
  4. egrep sed wie ersetzte ich ein : durch ein /

    egrep sed wie ersetzte ich ein : durch ein /: Hallo, habe folgendes Problem, wie ersetzte ich eine 1: ---> /1/ in einer bestimmten Datei? sed 's/:/ / /...
  5. egrep-Frage

    egrep-Frage: Hallo, ich habe Logfiles in folgendem Format: [01/09/2008 12 00:00:11] warning execution time 2 s Da die logfiles sehr groß sind brauche...