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.txt
Datei 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.*'
grep
gibt 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 grep
hat 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, -H
um den Dateinamen immer zu drucken.