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

  • Acest răspuns ar putea fi îmbunătățit subliniind că semnalizatorul -H la grep este o extensie GNU non-standard și prezintă o abordare alternativă pentru sistemele non-GNU.

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *