Regex nur Zeilen ohne Treffer

Hallo Allerseits,

gibt es eine Möglichkeit per Regex nur die Zeilen zu finden, die den Suchbegriff nicht enthalten?

Gesucht habe ich schon aber leider nichts gefunden.

Danke im Voraus.

MfG

AL

Hallo,

sofern ich mich recht erinnere, ist dies so einfach nicht. Welche Programmierumgebung/System nutzt du denn?

Grüße

godam

Moin,

gibts in Regexps nicht auch ein NOT?

Gruß,
-Efchen

gibts in Regexps nicht auch ein NOT?

Hallo Efchen,

für mich ist regex oder regexp ein Buch mit sieben Regeln.
Denkbar ist schon daß es so was gibt aber ich bin trotz Unkenntnis sicher daß es dabei nicht geht einfach den Begriff „Not“ in die Befehlszeile zu schreiben.

Auch Godam sagt ja daß dies schwierig sei. Kann ich nicht beurteilen aber sehe das erstmal ohne Eigenwissen so an wie er sagt.

Ich denke mir nur daß man bei so einem Regexp-Ausdruck wie
.Pattern = "(.+?)(.+?)Affensprache Ook!

Fazit, der Anfrager könnte zunächst mal hier seinen Suchausdruck zeigen,
ohne Kenntnis von regexp bin ich sicher daß würd Fachkundigen helfen diese Ausdruck „umzudrehen“.
Dann auch noch wie schon richtig gefragt in welcher Entwicklungsumgebung er das braucht.
Meine Codezeile stammt aus Vba. Aber regexp gibts auch in anderen Programmpaketen.

Dann kann er nur hoffen daß ihm kmd. die Lösung nennt.
Ansonsten muß er sich halt in das Thema reinknieen.

Gruß
Reinhard

Hallo,

gibt es eine Möglichkeit per Regex nur die Zeilen zu finden,
die den Suchbegriff nicht enthalten?

In Perl (und PCRE) kann man das mit einem negativen look-ahead machen:

/^(?!.\*?suchwort)/mg

Wobei es normalerweise einfacher und schneller ist, in dem Tool, das die Regex benutzt, die Bedingung zu negieren:

grep -v suchwort datei.txt

HTH,
Moritz

Hallo Allerseits,

und schon mal Danke für die vielen Infos.

Leider bin ich nicht davon ausgegangen, dass die Frage nach einer Regex so viele Fragen offen lässt, da ich dachte, dass es evtl. eine Anweisung für mein Anliegen gibt (schließlich ist die Bedeutung von z. B. „.“, „+“ oder „*“ auch immer gleich).

Aber falls jemand meine Software kennen möchte, mit der ich mit Regex arbeite:

  • Ultraedit
  • Notepad++
  • Powergreb
  • Wingreb

Je nachdem bei welchem Kunden ich große Mengen an Logfiles analysieren muss, kann ich die eine oder andere nutzen (abhängig von der Installation des Kundenrechners).

Aktuell habe ich das Problem, dass ich einen bestimmten Treffer landen muss, der aber einzeln nicht so einfach zu finden ist. Deswegen bekomme ich mehrere zigtausend Treffer und muss dann darin blättern. Die Falschtreffer enthalten aber zusätzlich ein Kriterium nach dem ich Suchen und dann negiert die (gewollten) Nichttreffer anzeigen lassen wollte. Aber evtl. hat ja jemand eine Lösung parat.

MfG

AL

Moin moin,

Deswegen bekomme ich mehrere zigtausend Treffer
und muss dann darin blättern. Die Falschtreffer enthalten aber
zusätzlich ein Kriterium nach dem ich Suchen und dann negiert
die (gewollten) Nichttreffer anzeigen lassen wollte. Aber
evtl. hat ja jemand eine Lösung parat.

Spontan fällt mir ein das Ergebnis zwischen zu speichern und dann noch einmal filtern.

Vielleicht wäre aber eine Programmierung wesentlich besser und schneller und vor allem weniger Fehler im ergebnis, als dieses Manuelle gestückel. sieht mir auch Mega fehlerträchtig aus , „Blättern“ lol , da merkt man wieder das Leute fehl am Arbeitsplatz sind. Aber gut wer mit Bleistifft gerne Farbe malen will kanns gerne versuchen.

Hallo,

wenn ich so frei sein und mal fragen darf wie ich nochmal filtern soll, wenn die gewünachten Zeilen eine 100% Untermenge (inhaltlich) aller Zeilen sind???

Leider Fragestellung nicht verstanden. Und falls Du jetzt auf die Idee kommst zu sagen …das habe ich nicht gewusst… ist es noch ein ganzes Stück impertinenter zu schreiben was Du schriebst.

Um es mit Deinen Worten zu sagen - ich käme auf so was Unverschämtes gar nicht bei einer sachlichen Frage eines Anderen.

Arroganzzitat ON

„Blättern“ lol , da merkt man wieder das Leute fehl am…

Arroganzzitat OFF

Spontan würde ich sagen - funktioniert nicht s. o.

Spontan fällt mir ein das Ergebnis zwischen zu speichern und

Wow, unglaublich was sich manche Leute anmaßen. Aber klar, damit ich jetzt nicht mehr fehl am Platz bin werde ich die Zielrechner in Kapstadt - Zugriff, um etwas darauf zu speichern hochgradig verboten und komplett deaktiviert - dann doch mit zusätzlichen/selbstgeschriebenen Progämmchen bespielen. Dem ITler des Pharmaunternehmens sage ich einfach - Thomas Punkt hat das so vorgeschlagen sonst wäre ich fehl am Platz.

Oh man, dass ich jetzt doch noch so’n Scheiß mitschreibe. Aber leider kann manches nicht völlig unkommentiert bleiben. Bis auf alles was jetzt noch kommt, das ist mir entschieden zu dämlich.

Und Tschö sacht

AL

Hi AL,

nimm dir die Antwort von Moritz zu Herzen. Er hat die beiden möglichen Wege genannt:

Entweder kannst du im Regexp selbst eine Negation einbauen. Dazu musst du herausfinden, ob dein verwendeter Regexp-Dialekt negative Lookaheads unterstützt.

Oder du kannst außerhalb des Regexp bei der Ausgabe/Anzeige negieren, wenn deine Software so einen Schalter hat. Beim klassischen Unix-grep ist das die Kommandozeilenoption „-v“.

Dort wäre dein eigentliches Problem durch „grep Kriterium1 | grep -v Kriterium2“ schon gelöst. Ob du bei deinen Tools auch mehrere Filterschritte hintereinanderschalten kannst wie bei einer Pipe, musst du herausfinden. Hilfsweise kannst du das Zwischenergebnis speichern, falls es nicht zu groß ist.

(schließlich ist die Bedeutung von z. B. „.“, „+“ oder „*“ auch immer
gleich)

Da irrst du dich: Bei manchen Regexp-Dialekten bedeutet z.B. „+“ einfach das Pluszeichen und man muss „+“ als Quantifier benutzen. :wink:

Viel Erfolg und viele Grüße,

Andreas

Hallo Al,

(schließlich
ist die Bedeutung von z. B. „.“, „+“ oder „*“ auch immer
gleich).

scheinbar nicht.

  • Ultraedit
  • Notepad++
  • Powergreb
  • Wingreb
    Je nachdem bei welchem Kunden ich große Mengen an Logfiles
    analysieren muss, kann ich die eine oder andere nutzen
    (abhängig von der Installation des Kundenrechners).

Einen Stick darfste wohl nicht einstecken, denn sonst hättest du immer dein Wunschprogramm vor Ort.

Aberr kann der Kunde (dessen IT) auf seinem System nicht dein
Wunschprogramm installieren? Denn dadurch bist du schneller als spart
der Kunde letztlich Geld als wenn du da blättern mußt.

Wenn da die PCs noch das Dos-Prompt haben, bei Win XP unter Start—
Ausführen, so könntest du da z.B. eintippseln:

cmd/c find /V „Suchwort“ K:\Such.log > K:\Ergebnis.txt

oder anstatt Find Findstr benutzen, das bietet mehr Auswahl bis hin
zu relulären Ausdrücken.

Nachstehend die Parameterliste für beide.

Gruß
Reinhard

Sucht in einer oder mehreren Dateien nach einer Zeichenfolge.

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]]„Zeichenfolge“
[[Laufwerk:][Pfad]Dateiname[…]]

/V Zeigt alle Zeilen an, die die Zeichenfolge NICHT enthalten.
/C Zeigt nur die Anzahl der die Zeichenfolge enthaltenden Zeilen an.
/N Zeigt die Zeilen mit ihren Zeilennummern an.
/I Ignoriert Groá-/Kleinschreibung bei der Suche.
/OFF[LINE] šberspringt keine Offlinedateien.
„Zeichenfolge“ Die zu suchende Zeichenfolge
[Laufwerk:][Pfad]Dateiname Zu durchsuchende Datei(en)

Fehlt der Pfad, so durchsucht FIND von der Tastatur aus eingegebenen
Text oder die Ausgabe des Befehls, der FIND in einer Befehlskette
vorangestellt ist.
Sucht nach Zeichenfolgen in Dateien.

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:smiley:atei]
[/C:Zeichenfolge] [/G:smiley:atei] [/D:Verz.liste] [/A:Farbattribute] [/OFF[LINE]]
Zeichenfolgen [[Laufwerk:][Pfad]Dateiname[…]]

/B Sucht am Zeilenanfang.
/E Sucht am Zeilenende.
/L Sucht nach dem Text buchstabengetreu.
/R Sucht nach der Zeichenfolge als regul„rem Ausdruck.
/S Sucht nach entsprechenden Dateien im aktuellen Verzeichnis
und allen Unterverzeichnissen.
/I Ignoriert Groá-/Kleinschreibung.
/X Gibt Zeilen aus, die vollkommen bereinstimmen.
/V Gibt Zeilen aus, die die Zeichenfolge nicht enthalten.
/N Gibt die Zeilennummer vor jeder Trefferzeile an.
/M Gibt nur die Namen der Dateien aus, die die Zeichenfolge enthalten.
/O Gibt den Offset des Zeichens vor jeder gefundenen Zeile aus.
/P šberspringt Dateien mit Zeichen, die nicht gedruckt werden k”nnen.
/OFF[LINE] šberspringt keine Offlinedateien.
/A:Attrib Gibt die Farbattribute als zwei hexadezimale Ziffern an.
Siehe „COLOR /?“
/F:smiley:atei Liest eine Dateiliste aus der angegebenen Datei ein.
/C:Zeichenfolge Sucht nach Zeichenfolge buchstabengetreu.
/G:smiley:atei Liest Suchzeichenfolge aus der angegebenen Datei ein.
/D:Verzeichnis Durchsucht eine mit Semikolons getrennte Verzeichnisliste.
Zeichenfolge Text, nach dem gesucht werden soll.
[Laufwerk:][Pfad] Dateiname
Angabe der zu durchsuchenden Datei(en).

Leerzeichen weisen auf mehrere getrennte Zeichenfolgen hin, auáer es wurde /C
als Option angegeben. Zum Beispiel sucht ‚FINDSTR „Windows NT“ BR.TXT‘ nach
„Windows“ oder „NT“ in der Datei BR.TXT. ‚FINDSTR /C:„Windows NT“ BR.TXT‘
hingegen sucht nach „Windows NT“ in der Datei BR.TXT.

Schnellbersicht regul„rer Ausdrcke:
. Platzhalter: beliebiges Zeichen
* Wiederholung: keine oder mehrere Wiederholungen
des/der vorhergehenden Zeichens/Klasse
^ Zeilenposition: Anfang der Zeile
$ Zeilenposition: Ende der Zeile
[Klasse] Zeichenklasse: beliebiges Zeichen aus einem Zeichensatz
[^Klasse] Umgekehrte Klasse: beliebiges Zeichen nicht im Zeichensatz
[x-y] Bereich: beliebige Zeichen im angegebenen Bereich
\x Escape: direkte Verwendung eines Metazeichens x
\ Wortposition: am Ende des Wortes

Informationen zu FINDSTR mit regul„ren Ausdrcken finden Sie im
Onlinebefehlsverzeichnis.

Hallo Reinhard,

herzichen Dank für den Tipp. Nach langem Hin und Her konnte die dortige IT dazu gedrängt werden die Eingabeaufforderung zu aktivieren. Nun ist es kein Problem mehr mittels find /V das Gewünschte zu erhalten.

Natürlich auch Danke an fast alle anderen Tippgeber.

MfG

AL