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? GNU grep? 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.