Als ik find
gebruik, hoe kan ik dan de bestandsnaam en het regelnummer retourneren als ik naar een string zoek? Het lukt me om de bestandsnaam in het ene commando terug te geven en de regelnummers met een ander, maar ik kan ze “niet combineren.
Bestandsnamen: find . -type f -exec grep -l "string to search" {} \;
Regelnummers: find . -type f -exec grep -n "string to search" {} \;
Antwoord
De opdrachtregelschakelaar -H
dwingt grep
om de bestandsnaam af te drukken, zelfs met slechts één bestand.
% 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.
Merk op dat zoals Kojiro zegt in een opmerking , dit maakt geen deel uit van de POSIX-standaard; het is zowel in GNU als in BSD grep, maar het is mogelijk dat sommige systemen dit niet hebben (bijv. Solaris).
Reacties
Antwoord
find . -type f -exec grep -n "string to search" /dev/null {} +
(of met GNU grep, zie de -H
option)
Reacties
- zowel + als -H werken prima, bedankt!
- En gerelateerd aan dit antwoord: unix.stackexchange.com/questions/3682/…
- +1 Juist, want als
grep
meerdere bestandsnaam-args zou hebben, zou het gedwongen worden om de overeenkomende bestandsnamen uit te voeren. Slim!
Antwoord
Als je grep het recursieve -r
vlag, dit lost uw verzoek op:
grep -rn "String to search " *
Reacties
- Dat ' is waar, maar ik ' zie niet wat dit toevoegt aan de bestaande antwoorden.
- En als er maar één is (geen punt ) bestand in de huidige directory, dit toont niet de bestandsnaam.
-H
vlag naargrep
is een niet-standaard GNU-extensie en biedt een alternatieve benadering voor niet-GNU-systemen.