Bagaimana cara mengembalikan nama file dan nomor baris dengan find… -exec grep?


45

Saat menggunakan find, bagaimana cara mengembalikan nama file dan nomor baris saat mencari string? Saya berhasil mengembalikan nama file dalam satu perintah dan nomor baris dengan yang lain, tapi sepertinya saya tidak bisa menggabungkannya.

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

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

Jawaban:


51

Saklar baris perintah -Hmemaksa grepuntuk mencetak nama file, bahkan hanya dengan satu file.

% 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.

Perhatikan bahwa seperti yang dikatakan Kojiro dalam komentar , ini bukan bagian dari standar POSIX; itu ada di grep GNU dan BSD, tetapi mungkin beberapa sistem tidak memilikinya (mis. Solaris).


4
Jawaban ini dapat ditingkatkan dengan menunjukkan bahwa -Hflag to grepadalah ekstensi GNU yang tidak standar dan mengajukan pendekatan alternatif untuk sistem non-GNU.
kojiro


-1

Jika grep Anda mendukung tanda rekursif -r, ini menyelesaikan permintaan Anda:

grep -rn "String to search " * 

1
Itu benar, tetapi saya tidak melihat apa ini menambah jawaban yang ada.
Wildcard

Dan jika hanya ada satu file (non-dot) di direktori saat ini, ini tidak menampilkan nama file.
G-Man Mengatakan 'Reinstate Monica'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.