Grep çıktısında dosya adını ve satır numarasını göster


87

Grep kullanarak raylar dizinimi aramaya çalışıyorum. Belirli bir kelimeyi arıyorum ve dosya adını ve satır numarasını yazdırmak istiyorum.

Bunu benim için yapacak grep bayrağı var mı? Ben bir kombinasyonunu kullanmaya çalışıyorlar -nve -lancak bu ya hiç sayılarla dosya adlarını yazdırmak ya da sadece kolayca okunamaz terminale metnin bir sürü damping.

ör .:

  grep -ln "search" *

Onu awk'a çevirmem gerekiyor mu?


Yanıtlar:


140

-lÇıktısını bastırdığı için çok kısıtlayıcı olduğunu düşünüyorum -n. Öneririm -H( --with-filename): Her eşleşme için dosya adını yazdırın.

grep -Hn "search" *

Bu çok fazla çıktı verirse, -oyalnızca eşleşen kısmı yazdırmaya çalışın .

grep -nHo "search" * 

Bu cevap benim için de çalıştı. Yinelemeli aramaya ihtiyacım vardı ve şu örnek komutu kullandım: grep -Hnor "localhost". Bu liste, tüm eşleşmeleri dosya adı ve satır numarasıyla, kısa ve öz olarak ayarlar.
Tore Aurstad

Bu, yalnızca dosya adı ve satır numarasını değil sonucu da görüntüler
2020'de

30
grep -rin searchstring * | cut -d: -f1-2

Bu searchstring, büyük / küçük harf görmezden gelerek özyinelemeli arama ( bu örnekteki dize için ) ve satır numaralarını görüntüleme anlamına gelir. Bu grep'in çıktısı şuna benzer:

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

Daha sonra, :alan sınırlayıcımız olarak iki nokta üst üste kullanarak ve 1'den 2'ye kadar olan alanları görüntüleyerek kesme komutunun sonucunu yönlendiririz .

Sık kullandığım satır numaralarına ihtiyacım olmadığında -f1(yalnızca dosya adı ve yol) ve ardından çıktıyı yönlendir uniq, böylece her dosya adını yalnızca bir kez görebilirim:

grep -ir searchstring * | cut -d: -f1 | uniq

1
Bunun orijinal soruyu en iyi yanıtladığını hissediyorum. Yalnızca dosya adları ve satır numaraları.
mastaBlasta

1
Zaten bir iki nokta üst üste içerdiği için `C: \ Users \ me \ git` gibi mutlak Windows yol adlarına sahipseniz bunun işe yaramayacağını unutmayın.
Hirse

19

Kullanmayı seviyorum:

grep -niro 'searchstring' <path>

Ama bunun sebebi her zaman diğer yolları unutmam ve bir sebepten Robert de grep -niro'yu unutamıyorum :)


Yukarıdakilere olumlu oy vereceğimi hiç düşünmemiştim. Sadece eğlenceli bir paylaşım. Teşekkürler! (Ama gerçekten işe yarıyor - en azından MacOS'ta)
Bas van Ommen

Bunu hatırlama şeklinizi seviyorum!
Greg Hilston

1

@ToreAurstad'dan gelen yorum yazılabilir grep -Horn 'search' ./, bu da hatırlaması daha kolaydır.

grep -HEroine 'search' ./ ayrıca çalışabilir;)

Meraklılar için:

$ 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

0

Bir dize içeren fortran dosyalarını bulmak için bir ağaçta arama yapmak için yükseltilmiş yanıtı nasıl kullandım:

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

NHo olmadan, yalnızca bir yerde bazı dosyaların dizeyle eşleştiğini öğrenirsiniz.

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.