Wie kann ich mit find… -exec grep sowohl den Dateinamen als auch die Zeilennummer zurückgeben?


45

Bei der Verwendung find, wie kehre ich die Dateinamen und die Zeilennummer , wenn nach einer Zeichenfolge gesucht? Es gelingt mir, den Dateinamen in einem Befehl und die Zeilennummern mit einem anderen zurückzugeben, aber ich kann sie scheinbar nicht kombinieren.

Dateinamen: find . -type f -exec grep -l 'string to search' {} \;

Linien Nummern: find . -type f -exec grep -n 'string to search' {} \;

Antworten:


51

Die Befehlszeilenoption -Herzwingt grepdas Drucken des Dateinamens, auch wenn nur eine Datei vorhanden ist.

% grep -n 7 test.in
7:7
% grep -Hn 7 test.in
test.in:7:7

   -H, --with-filename
          Print the filename for each match.

Beachten Sie, dass dies, wie Kojiro in einem Kommentar sagt , nicht Teil des POSIX-Standards ist. Es ist sowohl in GNU als auch in BSD grep enthalten, aber es ist möglich, dass einige Systeme es nicht haben (z. B. Solaris).


4
Diese Antwort könnte verbessert werden, indem darauf hingewiesen wird, dass das -HFlag to grepeine nicht standardmäßige GNU-Erweiterung ist, und ein alternativer Ansatz für Nicht-GNU-Systeme vorgeschlagen wird.
Kojiro


-1

Wenn Ihr grep das rekursive -rFlag unterstützt, löst dies Ihre Anfrage:

grep -rn "String to search " * 

1
Das stimmt, aber ich verstehe nicht, was dies zu den vorhandenen Antworten beiträgt.
Wildcard

Wenn sich im aktuellen Verzeichnis nur eine (Nicht-Punkt-) Datei befindet, wird der Dateiname nicht angezeigt.
G-Man sagt, dass Monica
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.