Grepen Sie mehrere Muster und drucken Sie die Ergebnisse mit dem Übereinstimmungsmuster

Grepen Sie mehrere Muster und drucken Sie die Ergebnisse mit dem Übereinstimmungsmuster

Ich möchte mehrere Dateien mit mehreren Werten greppen. Zum Beispiel: grep -f filename.txt /home/* -R
(filename.txt enthält mehrere Werte)

Ich muss aber wissen, welche Datei welchen Wert enthält.
Zum Beispiel: /home/blah.txt enthält Wert1, /home/aaa.txt enthält Wert2 usw.

irgendwelche Vorschläge?

Antwort1

Sie können dies mithilfe einiger der von bereitgestellten Flags tun grep.

Sie können den folgenden Befehl versuchen:

grep -R -f filename.txt /home/*sucht nach jedem Muster in Ihrer filename.txtDatei und gleicht es rekursiv mit allen Dateien in Ihrem Home-Ordner ab. Sie erhalten eine Ausgabe wie diese:

#here my filename contains the entries bash and Bingo
$grep -R -f filename.txt /home/*
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:vi .bashrc
/home/user/.bash_history:awk -v RS=END_WORD '/Bingo1/ && /Bingo2/' test2.txt | grep -o 'Pokeman.*'

grepgibt den Dateinamen und die vollständige Zeile aus, die Ihr Muster enthält.

Wenn Sie nur das gefundene Muster anzeigen möchten, versuchen Sie den folgenden Befehl:

#here the -o flag only displays the matched values, and -n adds the line number
$grep -R -o -n -f test /home/*
/home/user/.bash_history:128:bash
/home/user/.bash_history:156:bash
/home/user/.bash_history:193:Bingo

Antwort2

Dies sollte in Ihrer Situation funktionieren:

grep -HRnF '<pattern>' . --include "<file_name>"

Um nach dem Wort „Test“ in allen Dateien zu suchen, die mit .txt enden, verwenden Sie etwas wie:

grep -HRnF 'test' . --include "*.txt"

Antwort3

GNU grephat die Option -o:

-o, --only-matching

Drucken Sie nur die übereinstimmenden (nicht leeren) Teile einer übereinstimmenden Zeile, wobei jeder dieser Teile in einer separaten Ausgabezeile steht.

Das sollte also tun, was Sie wollen

grep -f filename.txt -R -H -o /home/*

Beachten Sie, dass ich auch (-with-filename) hinzugefügt habe, -Hum den Dateinamen immer zu drucken.

verwandte Informationen