] Wie gebe ich bei Verwendung von find, wie gebe ich bei der Suche nach einem String den Dateinamen und die Strichennummer zurück? 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" {} \;

Zeilennummern: find . -type f -exec grep -n "string to search" {} \;

Antwort

Die Befehlszeilenschalter -H zwingt grep, den Dateinamen auch mit nur einer Datei zu drucken.

% 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 Kojiro in ein Kommentar , dies ist nicht Teil des POSIX-Standards; es ist sowohl in GNU als auch in BSD grep, aber es ist möglich, dass einige Systeme es nicht haben (z. B. Solaris).

Kommentare

  • Diese Antwort könnte verbessert werden, indem darauf hingewiesen wird, dass das -H -Flag grep ist eine nicht standardmäßige GNU-Erweiterung und stellt einen alternativen Ansatz für Nicht-GNU-Systeme dar.

Antwort

find . -type f -exec grep -n "string to search" /dev/null {} + 

(oder mit GNU grep siehe -H Option)

Kommentare

  • Sowohl + als auch -H funktionieren hervorragend, danke!
  • Und im Zusammenhang mit dieser Antwort: unix.stackexchange.com/questions/3682/…
  • +1 Richtig, da grep mehrere Dateinamenargumente enthält und die übereinstimmenden Dateinamen ausgegeben werden. Clever!

Antwort

Wenn Ihr grep die rekursive -r Flag, dies löst Ihre Anfrage:

grep -rn "String to search " * 

Kommentare

  • Das ' ist wahr, aber ich ' sehe nicht, was dies zu den vorhandenen Antworten hinzufügt.
  • Und wenn es nur eine gibt (kein Punkt) ) Datei im aktuellen Verzeichnis, hier wird der Dateiname nicht angezeigt.

Schreibe einen Kommentar

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