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 1142
nomor 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?
Jawaban:
sumber
-r
jika Anda menentukan banyak file. Anda hanya perlu-r
jika Anda menentukan direktori.Nomor baris dicetak dengan
grep -n
:Untuk mendapatkan hanya nomor baris (tanpa baris yang cocok), orang dapat menggunakan
cut
:Garis yang tidak mengandung pola dicetak dengan
grep -v
:sumber
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)grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
Jika Anda hanya menginginkan nomor baris, lakukan ini:
Contoh:
sumber
awk -F: '{print $1}'
juga bekerja & Anda tidak perlu-r
digrep
bila digunakan pada file (hanya direktori dapat dicari secara rekursif)Cari pola dan tampilkan 20 garis setelah dan sebelum pola
sumber
-C20
adalah versi yang lebih pendek jika itu yang diinginkandirektori grep -nr "string pencarian"
Ini memberi Anda garis dengan nomor baris.
sumber
Untuk menampilkan hasil dengan nomor baris, Anda dapat mencoba ini
Hasilnya harus seperti ini:
sumber