Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
grep - Suche nach mehreren Begriffen mit UND verknüpft

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Gast






BeitragVerfasst am: 13. Apr 2004 10:55   Titel: grep - Suche nach mehreren Begriffen mit UND verknüpft

Hallo!

Ich suche nach den passenden Befehl, um alle Dateien unter dem akutellen Verzeichnisses nach mehreren Begriffen zu durchsuchen. Die Begriffe müssen alle mit UND verknüpft werden, d.h. es wird nur ein Ergebnis (Dateiname) ausgegeben, wenn Begriff 1 und Begriff 2 und .... gefunden wurden.

Kann mir bitte jemand von Euch weiter helfen ???

Vielen Dank schon mal.

Thomas
 

kanonenfutter
Gast





BeitragVerfasst am: 13. Apr 2004 11:14   Titel:

man egrep
 

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 13. Apr 2004 13:01   Titel: Ein kleines bisschen shellskripten...

Hi,

meinst Du "in allen Dateien im aktuellen Verzeichnis" oder "in allen Dateien rekursiv ab dem aktuellen Verzeichnis"? Das kommt in Deinem Posting nicht ganz durch.

Ansonsten ist "man egrep" m.E. nicht wirklich ausreichend; man kann zwar über "-e" mehrere Regexps angeben, aber die werden geODERt, nicht geUNDet. Ich würd's so machen:
Code:
find . -type f -maxdepth 1 -print0 | xargs -0 grep --null -l 'RE1' | xargs -0 grep --null -l 'RE2' | xargs -0 grep -l 'RE3'

find listet im aktuellen Verzeichnis alle normalen Dateien auf; wenn man -maxdepth weg lässt, arbeitet find rekursiv. Die Dateinamen werden für's erste grep zur Argumentliste aufbereitet (xargs). grep sucht alle Dateien raus, die RE1 als Treffer haben und gibt die Dateinamen weiter, die dann wieder zur Argumentliste für's nächste grep gemacht werden, welches dannn ur noch Dateien weitergibt, in denen auch noch der RE2 auftaucht. Damit Dateien mit problematischen Namen (mit Leerzeichen usw.) nicht stören, werden die Dateinamen alls mit Null-Byte als abschliessendem Zeichen ausgegeben (-print0, -0, --null). Damit man die Ausgabe zuletzt aber schön lesen kann, kässt man beim letzten grep die Option --null weg.

Alle Klarheiten beseitigt? Wink

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Scory
Gast





BeitragVerfasst am: 13. Apr 2004 15:37   Titel:

Ich würde ein Miniscript schreiben (was dann die Suchpattern als Argument mitbekommt, hat den Vorteil, daß es einfacher ist die Anzahl Pattern variabel zu halten).

Nennen wir das Script "ff" (file finder), und schreiben diesen Inhalt:

files=`ls` export files #welche Dateien sollen durchsucht werden
for i in $*
do
files=`grep -l $i $files`
done
echo $files

Zum Schluss mit "chmod +x ff" die Datei ausführbar machen, und dann nur noch aufrufen mit:

./ff pattern1 pattern2 pattern3

Viele Wege führen nach Rom ...
 

jj



Anmeldungsdatum: 03.12.2002
Beiträge: 5

BeitragVerfasst am: 13. Apr 2004 22:55   Titel:

Mir kommt

    grep -r RE1 * | grep RE2


am einfachsten vor. Spricht was dagegen?

gruss
jj
 
Benutzer-Profile anzeigen Private Nachricht senden

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 14. Apr 2004 8:30   Titel:

@jj: Ja.

Du setzt voraus, dass alle Treffer zusammen in einer Zeile auftreten müssen! Wenn man eine Datei mit Inhalt

ABC
123

hat und nach den REs 'ABC' und '123' sucht, die zusammen in einer Datei auftreten sollen, würde mit Deinem Skript die obige Datei durchfallen...

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

prospero_p
Gast





BeitragVerfasst am: 14. Apr 2004 9:20   Titel: geht doch

nunja grep -r RE1 * | grep RE2 das geht nicht,
aber:
grep -r -l RE1 * |xargs grep -l RE2

gruss prospero
 

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 14. Apr 2004 9:26   Titel:

Exakt. Und das entspricht dem Prinzip meiner Lösung. Wink

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy