Rekursiv String in Dateien suchen

F

fencingline

Mitglied
Hallo zusammen,

grep -r oder grep -R geht leider nicht:

grep: illegal option -- r

Ich möchte auf einem Unix-System alle Dateien nach einem bestimmten String durchsuchen. Welche Möglichkeiten habe ich?

Gemeint ist:

Code:
cd /
grep -R "Suchstring" *

Die Shell ist eine SH-Shell.

Besten Dank im Voraus!
FCL
 
Sollte eigentlich funktionieren.
Bist du dir allerdings sicher, ob du die Suche nicht weiter eingrenzen kannst?
Ich meine, /dev, /proc oder auch /mnt (steigt dann rekursiv in gemountete filesystems ab) zu durchsuchen ist doch bestimmt nicht notwendig, oder?
Hm, vielleicht stören dich einfach nur die Fehlermeldungen.
Code:
cd /; fgrep -R "suchstring" * 2>/dev/null
kA, das dauert aber wahrscheinlich seeeeeehr lange, bis es mal fertig ist.
Btw, wenn "suchstring" wirklich ein Suchstring ist, und kein pattern, ist fgrep performanter (und generell angebracht).

Und globbing mit Asterisk (*) sollte in sh eigentlich "funzen".
 
Interessanter wäre vielleicht noch die grep Version zu kennen. (Ich hab einfach mal GNU grep vermutet.)
 
Ich habe die Lösung doch noch mit Hilfe von Google gefunden:

Code:
find / -exec grep -l "Suchstring" {} \;

Danke dennoch für die Unterstützung!
 
grep -r oder grep -R geht leider nicht:

grep: illegal option -- r
Zja, -r geht (bei dir) scheinbar nicht, aber was ist denn mit -R? "Geht nicht" ist immer so'ne diffuse (bis gar keine) Fehlermeldung. Würd mich einfach mal interessieren warum das nicht funktioniert.
 
Das ist das selbe:

grep: illegal option -- R
 
Hallo,
ich habe ein ähnliches Anliegen. Ich möchte aber die Dateien nur ausgegeben bekommen, wenn mehrere Strings (StringA und StringB) enthalten sind.

gibt es sowas wie:
Code:
find / -exec grep -l "SuchstringA"|"SuchstringB" {} \;

Ich habe die Lösung doch noch mit Hilfe von Google gefunden:

Code:
find / -exec grep -l "Suchstring" {} \;

Danke dennoch für die Unterstützung!
 
Hallo,
ich habe ein ähnliches Anliegen. Ich möchte aber die Dateien nur ausgegeben bekommen, wenn mehrere Strings (StringA und StringB) enthalten sind.
UND kann man normalerweise mit zwei hintereinandergeschalteten greps machen:
Code:
echo "SuchstringA"|grep SuchstringA | grep SuchstringB   :  findet nix
Code:
echo "SuchstringB"|grep SuchstringA | grep SuchstringB   :  findet nix
Code:
echo "SuchstringA bla bla SuchstringB"|grep SuchstringA | grep SuchstringB     : findet was
Die Pipe öffnet aber eine Subshell, da funktioniert das find dann nicht mehr, jedenfalls auf die Schnelle fällt mir da nix ein.

Ausserdem will man nur in Dateien suchen, deshalb würde ich noch -typ f als Schalter für find setzen,
sonst gibts bei dirs einen Fehlermeldung.

Ohne find, mit grep das -r kennt:
Code:
grep -r SuchstringA startverzeichnis| grep SuchstringB
Allerding geht dann -l nicht mehr. Es wird ausgegeben:
gematchte_datei:gematchte Zeile
Das kann man dann nochmal mit sed wegparsen.

Oder man macht
Code:
find startdir -type f  -exec awk -f doppelgrep.awk {}\;

doppelgrep.awk:
Code:
BEGIN {
  match1=0;
  match2=0;
}
/SuchstringA/ {
  match1 = 1;
}

/SuchstringB/ {
  match2 = 1;
}

END {
  if ( match1 && match2 ) {
   print FILENAME
  }
}

Allerdings muss man dann sicherstellen dass awk nur Textdateien erhält, sonst gibts Fehler.
 

Ähnliche Themen

Dateien in Unix finden, die mehrere Strings beinhalten

Welches Linux/Unix für ehemaligen OSX Nutzer?

iptables Konfigurationsdatei

Samba Dateien und Ordner verschieben

.cfg Datei Analysieren und Zeilen Stellenweise abändern

Zurück
Oben