Tampilkan nama file dan nomor baris dalam keluaran grep

87

Saya mencoba mencari direktori rel saya menggunakan grep. Saya mencari kata tertentu dan saya ingin grep mencetak nama file dan nomor baris.

Apakah ada bendera grep yang akan melakukan ini untuk saya? Saya telah mencoba menggunakan kombinasi -ndan -ltetapi ini baik mencetak nama file tanpa nomor atau hanya membuang banyak teks ke terminal yang tidak dapat dengan mudah dibaca.

ex:

  grep -ln "search" *

Apakah saya perlu menyalurkannya ke awk?

trev9065.dll
sumber

Jawaban:

140

Saya pikir -lterlalu membatasi karena menekan output -n. Saya menyarankan -H( --with-filename): Cetak nama file untuk setiap pertandingan.

grep -Hn "search" *

Jika hasilnya terlalu banyak, coba -ocetak hanya bagian yang cocok.

grep -nHo "search" * 
spokeadoke
sumber
Jawaban ini berhasil juga bagi saya. Saya perlu mencari secara rekursif dan menggunakan perintah contoh ini: grep -Hnor "localhost". Daftar ini mengatur semua kecocokan dengan nama file dan nomor baris, pendek dan ringkas.
Tore Aurstad
Ini juga menampilkan hasil dan bukan hanya nama file dan nomor baris
el
30
grep -rin searchstring * | cut -d: -f1-2

Ini akan mengatakan, telusuri secara rekursif (untuk string searchstringdalam contoh ini), abaikan huruf besar / kecil, dan tampilkan nomor baris. Output dari grep itu akan terlihat seperti:

/path/to/result/file.name:100: Line in file where 'searchstring' is found.

Selanjutnya kami menyalurkan hasil ke perintah cut menggunakan titik dua :sebagai pembatas bidang kami dan menampilkan bidang 1 hingga 2.

Ketika saya tidak membutuhkan nomor baris yang sering saya gunakan -f1(hanya nama file dan jalur), lalu menyalurkan output ke uniq, sehingga saya hanya melihat setiap nama file satu kali:

grep -ir searchstring * | cut -d: -f1 | uniq
JBW
sumber
1
Saya merasa ini adalah jawaban terbaik dari pertanyaan awal. Nama file dan nomor baris saja.
mastaBlasta
1
Perhatikan bahwa ini tidak berfungsi jika Anda memiliki nama jalur absolut Windows seperti `C: \ Users \ me \ git` karena sudah berisi satu titik dua.
menyewa
19

Saya suka menggunakan:

grep -niro 'searchstring' <path>

Tapi itu hanya karena saya selalu melupakan cara lain dan saya tidak bisa melupakan Robert de grep -niro karena suatu alasan :)

Bas van Ommen
sumber
Tidak pernah terpikir saya akan mendapatkan suara positif untuk hal di atas. Hanya berbagi yang menyenangkan. Terima kasih! (Tapi itu benar-benar berfungsi - setidaknya di MacOS)
Bas van Ommen
Cintai caramu mengingat ini!
Greg Hilston
1

Komentar dari @ToreAurstad bisa dibilang grep -Horn 'search' ./lebih gampang diingat.

grep -HEroine 'search' ./ bisa juga bekerja;)

Bagi yang penasaran:

$ grep --help | grep -Ee '-[HEroine],'
  -E, --extended-regexp     PATTERNS are extended regular expressions
  -e, --regexp=PATTERNS     use PATTERNS for matching
  -i, --ignore-case         ignore case distinctions
  -n, --line-number         print line number with output lines
  -H, --with-filename       print file name with output lines
  -o, --only-matching       show only nonempty parts of lines that match
  -r, --recursive           like --directories=recurse
Tekanan ritmik
sumber
0

Inilah cara saya menggunakan jawaban upvoted untuk mencari pohon untuk menemukan file fortran yang berisi string:

find . -name "*.f" -exec grep -nHo the_string {} \;

Tanpa nHo, Anda hanya belajar bahwa beberapa file, di suatu tempat, cocok dengan string.

Karl I.
sumber