Dapatkan nomor baris saat menggunakan grep

360

Saya menggunakan grep rekursif untuk mencari file untuk sebuah string, dan semua file yang cocok dan baris yang berisi string tersebut dicetak pada terminal. Tetapi mungkinkah untuk mendapatkan nomor baris dari garis itu juga ??

mis: saat ini yang saya dapatkan adalah /var/www/file.php: $options = "this.target", tetapi yang saya coba dapatkan adalah /var/www/file.php: 1142 $options = "this.target";, nah di mana 1142nomor baris yang berisi string itu.

Sintaks yang saya gunakan untuk grep secara rekursif adalah sudo grep -r 'pattern' '/var/www/file.php'

Satu pertanyaan lagi adalah, bagaimana kita mendapatkan hasil karena tidak sama dengan suatu pola. Suka semua file tetapi bukan yang memiliki string tertentu?

sai
sumber
Bendera -v akan menampilkan garis yang tidak cocok (grep -v myText MyFile.txt)
bcarroll

Jawaban:

546
grep -n SEARCHTERM file1 file2 ...
Miro A.
sumber
Saya punya pertanyaan cepat lain, bagaimana kita mendapatkan hasil karena tidak sama dengan suatu pola. Suka semua file tetapi bukan yang memiliki string tertentu?
Sai
5
itu akan menjadi saklar baris perintah -v. Jika Anda menjalankan 'grep --help', itu akan menampilkan semua opsi
Miro A.
56
Anda tidak perlu -rjika Anda menentukan banyak file. Anda hanya perlu -rjika Anda menentukan direktori.
Sparhawk
@JeanPaul - Saya melihat hasil yang sama untuk -nr dan -n -r. Versi grep apa yang Anda gunakan? $ grep -n -r nama * | wc-l 1984 $ grep -nr nama * | wc -l 1984 $ grep -V grep (BSD grep) 2.5.1-FreeBSD
Miro A.
Kode hanya menjawab, tidak ada penjelasan. : S
Florian Castelain
148

Nomor baris dicetak dengan grep -n:

grep -n pattern file.txt

Untuk mendapatkan hanya nomor baris (tanpa baris yang cocok), orang dapat menggunakan cut:

grep -n pattern file.txt | cut -d : -f 1

Garis yang tidak mengandung pola dicetak dengan grep -v:

grep -v pattern file.txt
carlito
sumber
3
Dan nomor baris terakhir yang cocok: grep -n pattern file.txt | cut -d : -f 1 | tail -1(Anda dapat menyimpan ini ke variabel dan menggunakannya untuk mis file ekor dari itu)
Nux
Dan untuk menghapus angka / titik dua pada awal setiap string Anda dapat menggunakan sesuatu seperti:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon
24

Jika Anda hanya menginginkan nomor baris, lakukan ini:

grep -nr Pattern file.ext | gawk '{print $1}' FS=":"

Contoh:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023
Cloud Falls
sumber
1
awk -F: '{print $1}'juga bekerja & Anda tidak perlu -rdi grepbila digunakan pada file (hanya direktori dapat dicari secara rekursif)
Stuart Cardall
7
grep -A20 -B20 pattern file.txt

Cari pola dan tampilkan 20 garis setelah dan sebelum pola

emilio
sumber
11
Ini sama sekali bukan apa yang diminta.
Jonathon Reinhart
3
Juga, -C20adalah versi yang lebih pendek jika itu yang diinginkan
Marty Neal
0

direktori grep -nr "string pencarian"

Ini memberi Anda garis dengan nomor baris.

membeli secara acak
sumber
0

Untuk menampilkan hasil dengan nomor baris, Anda dapat mencoba ini

grep -nr "word to search for" /path/to/file/file 

Hasilnya harus seperti ini:

linenumber: other data "word to search for" other data
Fouad Djebbar
sumber