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?


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

Jawaban:


546
grep -n SEARCHTERM file1 file2 ...

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

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

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


11
Ini sama sekali bukan apa yang diminta.
Jonathon Reinhart

3
Juga, -C20adalah versi yang lebih pendek jika itu yang diinginkan
Marty Neal


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