• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Linux: grep. Ich bin zu doof das ordentlich zu benutzen

Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
so. ich benutze hier nen debian mit normaler knoppix oberfläche und möchte die quelldateien finden, die mindestens einmal die methode portalGUIControl enthalten. Nen Kumpel meinte grep sei dafür die sonnvollste Anwendung.

also in den Wurzelordner gehen in dessen Knoten sich diese dateien befinden sollen
erstmal hab ich mit *.* gesucht, aber dann is mir eingefallen, dass ich eigentlich nur die *.inc durchsuchen will.

Meine Konsole sagt:
Code:
user@rechner: /usr/local/www/blabla$ grep -r "portalGUIControl" *.*
user@rechner: /usr/local/www/blabla$
user@rechner: /usr/local/www/blabla$ grep -r "portalGUIControl" *.inc
grep: *.inc Datei oder Verzeichnis nicht gefunden

Es gibt in den Unterverzeichnissen garantiert mindestens 2 *.inc dateien die portalGUIControl mindestens einmal enthalten.

Also, was mach ich falsch?
 
Mitglied seit
15.05.2003
Beiträge
11.307
Reaktionen
8
Ort
Fortuna 1895 Düsseldorf
nimm mal grep -r 'deinsuchmuster'

ausserdem dürfte das *.* überflüssig sein. und wenn du pech hast, werden die sterne als regexp erkannt und dort haben sie eine ganz andere bedeutung, als du es vielleicht erwartet hast. sieh dazu man grep hilft auch weiter.


€: kommando zurück, ein sternchen muss gesetzt werden sonst passiert nix, also in deinem fall

grep -r 'deinsuchmuster' *


vorausgesetzt du bist in dem verzeichnis, ansosnten muss du dem * den pfad voraussetzen
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
probiert.
dann hängt der cursor solange in der nächsten Zeile, bis ich ctrl+c drücke. :(

und wenn ich --help und man nicht schon benutzt hätte, würde ich hier nicht fragen. :angel:

*edit*
ok mit dem sternchen gehts. thx
 

palandir

Guest
In dem Fall kann das *.* keine Regexp sein, weil er es nicht in ' ' geschrieben hat, d.h. die Shell wertet das *.* aus.
Trotzdem ist *.* selten noetig unter Linux, * reicht normalerweise (*.* = nur Dateien die einen Punkt beinhalten (ausser am Anfang und Ende), * = alle Dateien). Unter Windows/DOS bedeutet *.* alle Dateien, was eigentlich falsch/unlogisch ist.

Der Fehler den du gemacht hast ist, dass du fuer grep -r hinten ein Verzeichnis angeben musst statt einer oder mehreren Dateien.
Wenn du nur alle *.inc-Dateien in einem Verzeichnis durchsuchen willst, kannst du find mit grep (ohne -r) kombinieren (z.B.: find verzeichnis -type f -name '*.inc' -print0 | xargs -0 /usr/bin/grep suchbegriff). print0 und xargs kann man sich vielleicht der Einfachheit halber sparen, aber so funktioniert es auch mit seltsam benannten Dateien. Siehe Man-Pages fuer Details.
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
au contraire! auch unter windows kann man "dir *" für alle files eingeben. *.* ist halt {wort|null}{.}{wort|null} - also alles wo nen punkt drin ist - wie du schon sagtest :p
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
danke. wieder was gelernt.

*edit*
ok haste schon reineditiert

is das hier ein rumeditiere heute. rofl.
*/edit*

@jean-luc: das mit dem franz hat stil hehe :top2:

btw: wusste garnicht dass es auch in windows dateien gibt, die keine endung haben. o_O
 

palandir

Guest
Ohne xargs/print0 muss der Befehl so aussehen:
find verzeichnis -type f -name '*.inc' -exec grep suchbegriff {} \;

Gibt aber dann Probleme mit Dateien die Leerzeichen oder andere Sonderzeichen enthalten.
 

Aule2

Guest
Noch zur erweiterten find -Anregung:
find . -iname '*.inc' -exec grep "DeinSuchText" {} \;
Ist besonders dann toll, wenn man gleich noch ein wenig DateienManipulation machen will ;)
 

The_Company

Guest
Die Shell matcht Dateinamen nach globs. Glob ist Regexp fuer Anfaenger, wie es alle aus DOS kennen. * bedeutet irgendwas, ? bedeutet genau ein Zeichen. Ergo ist *.* alles was einen Punkt enthaelt.
Das wird uebrigens von der Shell automatisch erweitert, das macht nicht grep. (Und automatisch erweitert wirds auch nur, wenn es mindestens einen Match gibt. Um automatische Erweiterung nicht zu bekommen, nimmt man uebrigens Anfuehrungszeichen.

PS: Ich hasse Shell.
PPS: find -exec ist wohl das katastophalste Escapen, dass ich jemals gesehen habe. Ausserdem sollte man das nicht mit Programmen machen, die zuviel Startup overhead haben.
 
Oben