Când se utilizează find
, cum pot returna numele fișierului și numărul liniei atunci când caut un șir? Am reușit să returnez numele fișierului într-o comandă și numerele de linie cu alta, dar nu pot să le combin.
Numele fișierelor: find . -type f -exec grep -l "string to search" {} \;
Numere de linie: find . -type f -exec grep -n "string to search" {} \;
Răspuns
comutatorul de linie de comandă -H
forțează grep
să imprime numele fișierului, chiar și cu un singur fișier.
% 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.
Rețineți că așa cum spune Kojiro în un comentariu , acesta nu face parte din standardul POSIX; este atât în grep GNU, cât și BSD, dar este posibil ca unele sisteme să nu aibă (de exemplu, Solaris).
Comentarii
Răspuns
find . -type f -exec grep -n "string to search" /dev/null {} +
(sau cu GNU grep, consultați -H
opțiune)
Comentarii
- atât + cât și -H funcționează excelent, vă mulțumim!
- Și legat de acest răspuns: unix.stackexchange.com/questions/3682/…
- +1 Corect, deoarece cauzarea
grep
a avea mai multe argumente pentru numele fișierului ar forța să scoată numele fișierelor potrivite. Inteligent!
Răspuns
Dacă grep-ul dvs. acceptă recursiv -r
semnalizator, aceasta rezolvă solicitarea dvs.:
grep -rn "String to search " *
Comentarii
- Că ' este adevărat, dar nu ' nu văd ce adaugă acest lucru la răspunsurile existente.
- Și dacă există doar unul (fără punct) ) în directorul curent, acesta nu afișează numele fișierului.
-H
lagrep
este o extensie GNU non-standard și prezintă o abordare alternativă pentru sistemele non-GNU.