Ich muss einige Dateien durchsuchen, um festzustellen, welche ein bestimmtes Wort enthalten:
grep -l word *
Als nächstes muss ich diese Liste von Dateien durchsuchen, um zu sehen, welche ein anderes Wort enthalten. Der einfache Weg wäre wahrscheinlich, ein Skript zu schreiben, aber ich weiß nicht genau, wie es funktioniert.
Kommentare
- Welche
grep
? GNUgrep
? Sind Sie unter Linux, Solaris, den BSDs? - I ' Ich verwende Linux.
Antwort
Angenommen, keiner der Dateinamen enthält Leerzeichen, einfache Anführungszeichen, Mit doppelten Anführungszeichen oder Backslash-Zeichen (oder mit – mit GNU grep
) können Sie Folgendes tun:
grep -l word * | xargs grep word2
Xargs führt den zweiten grep über jede Datei vom ersten grep aus aus.
Mit GNU grep
/ xargs
oder kompatibel, Sie können es zuverlässiger machen mit:
grep -lZ word ./* | xargs -r0 grep word2
Wenn Sie -Z
verwenden, wird grep
gibt die Dateinamen NUL-getrennt aus, damit sie mit xargs -0
verwendet werden können. Die Option -r
für xargs
vermeidet, dass das zweite grep
ausgeführt wird, wenn das erste grep
nichts findet.
Antwort
grep -l word1 $(grep -l word2 *)
oder vielleicht für eines der beiden Wörter in derselben Zeile:
grep -w "word1\|word2" *
siehe hier
Antwort
Wenn Sie Dateien suchen müssen, die ein Wort enthalten, und dann die Dateien herausfiltern müssen, die ein anderes Wort enthalten, können Sie eine Folge von Befehlen wie die folgende verwenden:
grep word * | awk -F ":" "{print $1}"|uniq | xargs grep word2
-
grep word *
– zeigt alle Dateien an, die „word“ enthalten. Der Dateiname steht an erster Stelle in der Liste. -
awk -F ":" "{print $1}"
– druckt nur den Dateinamen Ihrer Ergebnisse -
uniq
– stellt sicher, dass Sie den Dateinamen nicht mehr als drucken einmal. -
xargs grep word2
– sucht erneut in der Liste der Dateien, die Sie erhalten haben.
Kommentare
- @don_crissti Aber das Kombinieren von Teilen
grep -l word1 * | xargs -d'\n' grep -l word2
funktioniert für alles außer Zeilenumbruch, was seltsam genug ist, dass fast niemand es verwendet.