Wie durchsuche dateien unter linux nach zwei begriffen gleichzeitig
1 Antworten zur Frage
Videos zum Thema
Wie durchsuche ich Dateien unter Linux nach zwei Begriffen gleichzeitig?
find. -type f 2>/dev/null | xargs grep -l "begriff1" 2>/dev/null | xargs grep -l "begriff2" 2>/dev/null| xargs less -p begriff1\|begriff2
mit :n kommt man bei less zur nächsten Datei. Die Suchbegriffe werden beim Aufruf von less markiert. Um Umleitung des Fehlerkanals hält Fehler fern, die durch fehlende Berechtigung entstehen. Könnte man mit einer Schlaufe in einem Script laufen lassen, welche die Anzahl der Argumente beachtet, und so nach beliebig vielen Begriffen suchen könnte.
ich verstehe die Frage von Camael so, daß das Ergebnis eine Liste von Dateien sein soll, in denen beide Suchworte unabhängig voneinander auftreten. Die Antworten gehen da aber dran vorbei oder sind viel zu kompliziert. Am einfachsten ist dieses:
fgrep -l $string1 $(fgrep -l $string2 "$@")
Der innere Ausdruck liefert eine Liste der Dateien, in denen $string2 auftritt, der äußere Ausdruck selektiert daraus die Dateien, in denen $string1 auftritt.
Natürlich funktioniert das außer mit fgrep auch mit grep oder egrep. Die Ansicht, daß egrep nicht so schnell ist wie grep, ist so falsch, wie sie alt ist. Messen hilft! Vor 20 Jahren oder noch länger gab es tatsächlich Unterschiede - she. auch:Deutsch - BMP Baumanagement
Natürlich ist meine einzeilige Lösung zu einfach: die Argumentliste könnte zu lange werden und Dateinamen mit Leerzeichen führen zu unschönen Fehlermeldungen. Die erste Abhilfe ist, den Einzeiler in ein Skript zu packen und mit xargs aufzurufen. xargs hat aber selbst Probleme mit Leerzeichen ; dagegen hilft, Dateinamen mit Leerzeichen ganz zu vermeiden oder vorher auszufiltern und/oder extra zu behandeln.
Viel Spaß noch