Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 27

Thema: grep mit mehreren Suchkriterien

  1. #1
    Hardwarefreak Avatar von E S
    Registriert seit
    Jun 2003
    Ort
    Raum Bonn
    Beiträge
    1.252

    grep mit mehreren Suchkriterien

    Hi,

    ich muß textdateien (genauer logfiles) nach zwei oder mehreren Schlüsselwörtern durchsuchen. Dabei sollen alle dateien gefunden werden die beide Schlüsselwörter gleichzeitig aber an beliebiger Stelle enthalten.
    Laut manpage scheint das mit einer "regular expression" funktionieren. Allerdings kriege ich das nicht hin. Das beste Ergebnis was ich hatte war, dass grep dateien gefunden hat wo beide Schlüsselwörter in der selben Zeile standen.
    Ich brauche aber ALLE Dateien, also auch solche wo die Schlüsselwörter auch getrennt vorkommen können.

    Ich habe mir jetzt ein script geschrieben dass das erste Schlüsselwort sucht und die Ergebnisse für eine zweite Suche nutzt um diese Dateien dann nach dem zweiten Schlüssel abzusuchen. Das funktioniert zwar, aber das ist nicht flexibel und "über's Knie gebrochen".

    Da muss es doch eine bessere Lösung geben!

    Gruß
    Elmar
    Was in C nicht geht muß gelötet werden!

  2. #2
    Arsch mit Hörnern Avatar von solarix
    Registriert seit
    Dec 2003
    Ort
    Kuchen (Fils)
    Beiträge
    793
    Wieso versuchst Du es nicht mit egrep?
    Lesen bildet.....
    Wolle_lache_Wolle_Spaß/

  3. #3
    Registrierter Benutzer
    Registriert seit
    Jan 2008
    Beiträge
    2.551
    Code:
    grep -rE "wort1|wort2" *

  4. #4
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    ... dürfte doch auch die finden, in denen nur wort1 oder nur wort2 enthalten ist?

    hm, mein Ansatz wäre
    Code:
    grep -l $pattern2 $(find . -exec grep -l $pattern1 {} ';')
    und das als alias oder kleines Script verpackt...
    Ich bin root - ich darf das.

  5. #5
    Registrierter Benutzer Avatar von buzz768
    Registriert seit
    Apr 2005
    Ort
    Rostock
    Beiträge
    2.016
    Code:
    grep -l $pattern2 $(grep -R -l $pattern1 .)
    ist ein bißchen schneller.
    Arch Linux / Intel Z77 / i5-3570K / 8GB PC3-1333 / SAMSUNG SSD 830 128GB

  6. #6
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    habe ich bei mir hier probiert - blieb aber hängen, wenn (wenn ich mich recht entsinne, die historie ist leider von der anderen Konsole überschrieben worden) $pattern1 kein Ergebnis brachte, da dann das äußere grep den Input von Stdin erwartete...

    edit: noch mal nachgeforscht:
    Code:
    [marc@gandalf ~]$ grep -l bash $(grep -l exec .*)
    .bash_history
    .xinitrc
    [marc@gandalf ~]$ grep -l bash $(grep -l exeo .*)
    ... und das war's dann - nur noch ein beherztes Strg-C bringt das Prompt zurück...
    Geändert von marce (26.01.09 um 18:47 Uhr)
    Ich bin root - ich darf das.

  7. #7
    Registrierter Benutzer Avatar von buzz768
    Registriert seit
    Apr 2005
    Ort
    Rostock
    Beiträge
    2.016
    Das ist aber bei der Lösung mit find nicht anders.
    Arch Linux / Intel Z77 / i5-3570K / 8GB PC3-1333 / SAMSUNG SSD 830 128GB

  8. #8
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    hier geht's... - dachte ich. Verdammt, bin über die .bash-History gestolpert, in der natürlich mein Test-Pattern aus den normalen greps ohne find drin war...

    Öhm, tja - dann fällt mir gerade auch keine saubere Einzeiler-Version ohne Zwischendatei ein...
    Ich bin root - ich darf das.

  9. #9
    Hardwarefreak Avatar von E S
    Registriert seit
    Jun 2003
    Ort
    Raum Bonn
    Beiträge
    1.252
    Zitat Zitat von marce Beitrag anzeigen
    ... und das war's dann - nur noch ein beherztes Strg-C bringt das Prompt zurück...
    Auf meinem Vt420 Terminal noch nicht mal das. Nur ein paar Sekunden "break"-condition of der RS232 half... Seltsam



    Also,
    Code:
    grep -i "pattern2" &(grep -Ril "pattern1" *)
    scheint zu funktionieren. Nicht schön, funktioniert aber gut.

    Das "i" hab ich drin weill ich zu faul bin die Groß-/Kleinschreibung zu beachten

    Es müssen BEIDE Schüsselwörter vorhanden sein. "egrep" mit "Pattern1|Pattern2" findet alles wo mindestens eines drin ist.

    Es geht dadrum Logfiles zu finden wo zwei bestimmte Ereignisse am selben Tag aufgetreten sind. Die logfiles enthalten immer einen ganzen Tag.

    Weiss einer, wie man das sonnst noch anstellen kann ohne die ganze Tipperei? oder ist grep dazu alleine nicht geeignet?

    Gruß
    Elmar
    Geändert von E S (26.01.09 um 21:22 Uhr)
    Was in C nicht geht muß gelötet werden!

  10. #10
    Hardwarefreak Avatar von E S
    Registriert seit
    Jun 2003
    Ort
    Raum Bonn
    Beiträge
    1.252
    * * * gelöscht * * *
    Geändert von E S (26.01.09 um 21:42 Uhr) Grund: Funktioniert nicht!
    Was in C nicht geht muß gelötet werden!

  11. #11
    Hardwarefreak Avatar von E S
    Registriert seit
    Jun 2003
    Ort
    Raum Bonn
    Beiträge
    1.252
    Hi,

    Schade, funktioniert leider doch nicht! Irgendwas ist da Faul!

    Pattern1 ist in allen gefundenen Dateien, Pattern 2 nicht in allen. Allerdings sind nicht alle Dateien, die Pattern1 enthalten gefunden worden.

    Das verwirrt mich doch jetzt ein wenig sehr!

    Gruß
    Elmar
    Was in C nicht geht muß gelötet werden!

  12. #12
    Registrierter Benutzer
    Registriert seit
    Jan 2008
    Beiträge
    2.551
    Zitat Zitat von marce Beitrag anzeigen
    Öhm, tja - dann fällt mir gerade auch keine saubere Einzeiler-Version ohne Zwischendatei ein...
    Vllt. so?

    Code:
    grep -rE '.*wort1.*wort2.*|.*wort2.*wort1.*' *

  13. #13
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    wohl auch nicht :-(
    Code:
    [marc@radagast tmp]$ grep test1 *
    test2:test1
    [marc@radagast tmp]$ grep test2 *
    test1:test2
    test2:test2
    [marc@radagast tmp]$ grep -E '.*test1.*test2.*|.*test2.*test1.*' *
    [marc@radagast tmp]$
    Das Problem stellt dabei wahrscheintlich der Zeilenumbruch dar (hab' nicht genauer nachvollzogen - aber die sind ja bekanntlich immer beliebt bei sowas...)
    Ich bin root - ich darf das.

  14. #14
    Who's Johnny? Avatar von L00NIX
    Registriert seit
    Mar 2004
    Beiträge
    1.229
    Vielleicht auch mal so:
    Code:
    grep -e "wort1" -e "wort2" ... -e "wortn" file
    Reihenfolge der Wörter ist egal. Mit --color gibt es sogar noch den Match der Zeile mit aus, sofern interaktiv aufgerufen und von Terminaltyp unterstützt.

    Gruß
    L00NIX

    PS:
    Manchmal liegt die Manpage so nah...

  15. #15
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    auch nicht:
    Code:
    [marc@radagast tmp]$ grep -e "test1" -e "test2" *
    test1:test2
    test2:test1
    test2:test2
    [marc@radagast tmp]$
    Ich bin root - ich darf das.

Ähnliche Themen

  1. OpenSuse 10.3, 11 und Samsung Q45 PRO/Wireless 3945ABG
    Von Zwerg2003 im Forum Mobiles Linux, Notebook, PDA
    Antworten: 9
    Letzter Beitrag: 25.06.08, 13:10
  2. (LFS) Der Anfang :)
    Von HellTron im Forum Kompilieren von Kernel und Sourcen
    Antworten: 92
    Letzter Beitrag: 15.07.06, 10:56
  3. Antworten: 2
    Letzter Beitrag: 19.04.05, 11:32
  4. lmsensors
    Von ncoder im Forum System installieren und konfigurieren
    Antworten: 22
    Letzter Beitrag: 20.04.03, 11:00
  5. i2c-2.7.0 kompilieren
    Von skatetrash13 im Forum Kompilieren von Kernel und Sourcen
    Antworten: 11
    Letzter Beitrag: 17.03.03, 11:01

Lesezeichen

Berechtigungen

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