Belirli dosya türlerinde belirli metni nasıl ararsınız? [çift]


13

Olası Çoğalt:
Bazı metinler için kaynak dosyaları nasıl bulabilirim?

Geçerli dosya dizini altında, belirli dosya türlerinde belirli metinleri tekrarlı olarak arama komutu nedir?


Ne geri dönmek istiyorsun? metnin açık olduğu satır? metnin içinde bulunduğu dosyanın adı?
MaQleod

@ MaQleod: Mümkünse bu iyi olurdu (dosya adı + linenumber + snippet).
Phillip,

@slhck: ack-grep yüklü değil; Yüklemek için iznim yok.
Phillip,

1
İhtiyacınız olmaz ack-grep, sorudaki örnekleri bir başlangıç ​​olarak kullanabilirsiniz (dediğim gibi), yani find | xargs | grepçizgiler. Belirli çıktı için, man grepokumak her zaman yararlıdır.
slhck

@slhck: Teşekkürler, öyle yaptım grep -r --include=*.<type> "<string>" ., işe yaradı. Ne yazık ki, man sayfa sondaki noktadan bahsetmek çok kolay değil.
Phillip,

Yanıtlar:


11
find . -type f -name '*.extension' | xargs grep "string"

Çalışır Bu komut bulmak yerel dizin (.) Herhangi bir dosya için bir desen eşleştirme adlarla * .extension ardından ishal grep sonuçlarına "dizesi" için find . Not bulmak doğal özyinelemeli olduğunu. İstediğiniz dosyaları isme dayalı olmayan dosyalardan ayırt edebildiğiniz sürece, bunun sizin için çalışması gerekir.


2
Bu boşluk içeren dosya isimlerini kırarsa, print0daha güvenli olma seçeneğini kullanmalısınız .
slhck

Yalnızca find -print0yardım etmeyecek, aynı zamanda kullanacaksınız xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo 7:14

0

Dosya adını listelemek için belirtilen dosyada satır numarası ve satırda metin görünür:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

Yalnızca geçerli dizinde çalışır, ancak onu sizin için güzel bir şekilde biçimlendirir.

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.