Grep kullanırken satır numarası al


360

Bir dize dosyaları aramak için grep özyinelemeli kullanıyorum ve tüm eşleşen dosyaları ve bu dizeyi içeren satırları terminalde yazdırılır. Ama bu satırların satır numaralarını da almak mümkün mü ??

ex: şu anda ne olsun /var/www/file.php: $options = "this.target", ama almaya çalışıyorum şey /var/www/file.php: 1142 $options = "this.target";, iyi nerede 1142bu dize içeren satır numarası olurdu.

Sözdizimi özyinelemek için kullanıyorum sudo grep -r 'pattern' '/var/www/file.php'

Bir soru daha, bir desene eşit olmayan sonuçlar nasıl elde edilir. Tüm dosyalar gibi ama belirli bir dizeye sahip olanlar değil mi?


-V bayrağı eşleşmeyen satırları gösterir (grep -v myText MyFile.txt)
bcarroll

Yanıtlar:


546
grep -n SEARCHTERM file1 file2 ...

Bir başka hızlı sorum daha vardı, nasıl bir desene eşit olmayan sonuçlar elde edebiliriz. Tüm dosyalar gibi ama belirli bir dizeye sahip olanlar değil mi?
sai

5
komut satırı anahtarı -v. 'Grep --help' komutunu çalıştırırsanız tüm seçenekleri görüntüler
Miro A.

56
-rBirden fazla dosya belirtmeniz gerekmez . Yalnızca -rdizinleri belirtmeniz gerekir .
Sparhawk

@JeanPaul - Hem -nr hem de -n -r için aynı sonucu görüyorum. Hangi grep sürümünü kullanıyorsunuz? $ grep -n -r ad * | wc -l 1984 $ grep -nr adı * | wc-l 1984 $ grep -V grep (BSD grep) 2.5.1-FreeBSD
Miro A.

Kod sadece cevap, açıklama yok. : S
Florian Castelain

148

Satır numaraları şununla yazdırılır grep -n:

grep -n pattern file.txt

Yalnızca satır numarasını (eşleşen satır olmadan) almak için aşağıdakiler kullanılabilir cut:

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

Çizgiler değil bir desen ihtiva ile basılır grep -v:

grep -v pattern file.txt

3
Ve son eşleşen satır numarası: grep -n pattern file.txt | cut -d : -f 1 | tail -1(bunu bir değişkene kaydedebilir ve örneğin kuyruk dosyası olarak kullanabilirsiniz)
Nux

Ve her dizenin başında sayı / iki nokta üst üste kaldırmak için aşağıdaki gibi bir şey kullanabilirsiniz:grep -n pattern file.txt | sed 's/^[0-9][0-9]*://'
leetbacoon

24

Sadece satır numarasını istiyorsanız bunu yapın:

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

Misal:

$ grep -nr 9780545460262 EXT20130410.txt | gawk '{print $1}' FS=":" 
48793
52285
54023

1
awk -F: '{print $1}'da çalışır ve size ihtiyacım yok -riçinde grep(sadece dizinleri ardışık aranabilir) dosyalar üzerinde kullanıldığında
Stuart Cardall

7
grep -A20 -B20 pattern file.txt

Kalıp ara ve kalıptan sonra ve kalıptan önce 20 satır göster


11
Bu ne istendi değil.
Jonathon Reinhart

3
Ayrıca, -C20eğer istenen buysa daha kısa bir versiyonudur
Marty Neal

0

grep -nr "arama dizesi" dizini

Bu size satır numarasını içeren satırı verir.


0

Sonuçları satır numaralarıyla görüntülemek için şunu deneyebilirsiniz

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

Sonuç böyle bir şey olmalı:

linenumber: other data "word to search for" other data
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.