Dateien nach Strings durchsuchen

K

kivio

Grünschnabel
Hallo zusammen, ich möchte gerne mehrere Dateien (mehrere hundert Dateien mit stark verzweigter Verzeichnisstruktur) nach einem gewissen Inhalt durchsuchen und ausgeben, wie oft dieser Inhalt auftaucht. Ich habe es mit cat versucht, was auf eine einzelne Datei angewendet auch gut funktioniert.
Z.B. so:

cat file liefert:
linux
netbsd
dragonflybsd
freebsd
openbsd
solaris

cat file | grep bsd | wc -l liefert wie gewünscht 4.

Leider funktioniert cat nicht auf (Unter)Verzeichnisse. Hat jemand eine Idee?
 
du könntest es mit find probieren

find kennt z.b. den parameter "exec".

also mit find die verzeichnisse durchgehen, dann cat ausführen und das an grep pipen.

es gibt aber bestimmt noch wesentlich sauberere und bessere lösungen für sowas.
mir mag nur keine einfallen.
 
Hallo

Wenn du nur wissen willst wie oft das Suchwort gesamt in allen Datein vorkommt, dann geht es mit GNU grep z.B. so:
Code:
for i in $(find /home/wolle/ -type f -name "*txt" -exec grep -c "Suchwort" {} \;);do ALL=$(($ALL + $i ));done; echo Gesamt $ALL mal gefunden

Wenn du wissen willst in wievielen dateien das Suchwort vorkommt dagegen (mit GNU grep)
Code:
ALL=0;
for i in $(find /home/wolle/ -type f -name "*txt"); do B=$(grep -q "SUCHWORT" "$i");if [ $? -gt 0 ]; then ALL=$(($ALL+1));fi;done; echo Gesamt  $ALL Dateien mit Suchwort gefunden

Gruß Wolfgang
PS Ich habe hier nur Dateien mit der Endung txt durchsucht!
 
Hi,

also der erst Code funktioniert einwandfrei, aber der zweit hat irgendwie komische auswirkungen. Der erste finde 3 Dateien, der zweite 120?

Wie muss ich denn den Code umschreiben, damit ich die Dateien ausgegeben bekomme, in denen das Suchwort enthalten ist?

Danke
Gruss


Alex
(Beginner :) )
 
Sieht so aus, als ob Wolfgang da die if-Abfrage "falsch herum" gemacht hat. Außerdem versteh ich nicht, wieso er das Ergebnis von dem "grep -q" extra in eine Variable packt (sollte ja eigentlich eh nie was ausgeben..), wayne. Wenn du einfach die Dateien haben willst, in denen das Suchwort drin vorkommt, nimm den "-l" switch: (aus "grep --help": -l, --files-with-matches only print FILE names containing matches)
Code:
grep -rl 'suchausdruck' /path/to/teh/files/
das "-r" steht für "recursive" und durchsucht Unterverzeichnisse rekursiv. Willst du einfach nur die Anzahl der Treffer haben, kannst du dies auch einfach in wc (word count) mit dem "-l" switch pipen: (l für lines, also word count lines zählt die Zeilen der Ausgabe, die in es gepipet wird..)
Code:
grep -rl 'suchausdruck' /path/to/teh/files/|wc -l
 

Ähnliche Themen

Ersetzen von Text mit Datei-Inhalt

BSD Hacks

Zurück
Oben