kullanarak bir dize içeren dosyaları bulmak için Linux altında belirli bir dize içeren dosyaları bulmak istiyorum. Bir şey denedim ama başarılı olamadım:egrep
Bul. -name * .txt | egrep mystring
kullanarak bir dize içeren dosyaları bulmak için Linux altında belirli bir dize içeren dosyaları bulmak istiyorum. Bir şey denedim ama başarılı olamadım:egrep
Bul. -name * .txt | egrep mystring
'u kullanmanız gerekmektedir. Burada dosya adlarını (find command
'un çıkışı) örn. Aslında dosyaların içeriğine egrep'i çalıştırmak istersiniz.
find . -name "*.txt" -exec egrep mystring {} \;
veya
find . -name "*.txt" -print0 | xargs -0 egrep mystring
Kontrol find command help tek argümanlar ne kontrol etmek daha da iyi: Burada
bir alternatiflerin çift.egrep
olarak çalışmayacaktır
deneyin:
find . -name '*.txt' | xargs egrep mystring
sürümü ile iki sorun vardır: Birincisi
, *.txt
ilk kabuk tarafından genişletilmiş olacak, geçerli dizinde size dosyaların bir listesini vererek Örneğin, aşağıdaki gibi bir .txt
sonu:
sizin find
komutunuz find . -name test.txt
'a dönüşecektir. Sadece göstermek için aşağıdakileri deneyin:
[[email protected]:~]$ echo find . -name *.txt
find . -name test.txt
[[email protected]:~]$
İkincisi,
egrep
STDIN
gelen dosya adlarını almaz. Onları argümanlara dönüştürmek için
xargs
şunlarla deseni çevreleyen öneririm - Kabuğun üzerinde desen eşlemesi yapmasını engellemek için tırnak içine alın. –
Hepinize bu kadar kapsamlı cevaplar sağladığınız için teşekkür ederim. – Tolga
find . -name *.txt | egrep mystring
*.txt
dosyalara sadece yol vardır find . -name *.txt
tarafından üretilen çıktı dahilinde mystring
ararken olacak.
find . -name *.txt | xargs egrep mystring
Sen
find . -iname *.txt -exec egrep mystring \{\} \;
kullanabilirsiniz Burada ERROR
ile başlayan bir çizgi var, bir bütün *.log
dosyaların dosya yollarını dönecektir bir örnek:
Bunun yerine, xargs
kullanabilirsiniz :
find . -name "*.log" -exec egrep -l '^ERROR' {} \;
Yalnızca dosya istiyorsanız
Bu işe yaramıyor. -R seçeneği, yalnızca argüman listesinde yer alıyorsa dizinlere yeniden girer. Bu durumda, bu dizinlerdeki tüm dosyalar sadece .log. Bu yöntemle herhangi bir başarı elde ederseniz, geçerli dizinde .log ile biten dosyalar vardır, çünkü kabuk * .log dosyasını ayrıştırır. –
Belki "egrep -R" deseniyle "--include = *. Log."? – moala
egrep -R "pattern" *.log
kullanabilirsiniz egrep gelen özyinelemeli seçeneği:
find . -type f -name '*.txt' -exec egrep -l pattern {} \;
İsterseniz dosya ve maçları:
find . -type f -name '*.txt' -exec egrep pattern {} /dev/null \;
İlk komutunuzun sonunda '\ +' veya '\;' eksik. – spatz
Dosya adı mistring içinde bulamaz mı? Sanırım başka bir yol arıyor. – Kevin
@spatz: Yorum için teşekkürler, ben örneği düzelttim. –