Geçerli dizinde "merhaba" dizesini içeren tüm dosyaları aramak ve yalnızca .h ve .cc dosyalarını görüntülemek için grep'i nasıl kullanabilirim?
Geçerli dizinde "merhaba" dizesini içeren tüm dosyaları aramak ve yalnızca .h ve .cc dosyalarını görüntülemek için grep'i nasıl kullanabilirim?
Yanıtlar:
grep -r --include=*.{cc,h} "hello" .
Bu okur: bu .
(geçerli) dizinde "merhaba" içeren tüm .cc OR .h dosyaları için özyinelemeli (tüm alt dizinlerde de)
Dosya adlarını belirtmek veya stdin kullanmak yerine joker karakterler geçirebilirsiniz.
grep hello *.h *.cc
-R
maalesef çalışmıyor. *
Özyinelemeden önce genişler .
find . -name \*.cc -print0 -or -name \*.h -print0 | xargs -0 grep "hello"
.
İçin manuel sayfaları kontrol edin find
ve xargs
detaylar için.
-print0
sonra '*.cc'
aksi takdirde arama bu bölümü için bir eylem yok gibi. Yoksa orada parantez eklemek zorunda: find . \( -name '*.cc' -or -name '*.h' \) -print0
.
find -exec +
xargs yerine sözdizimini de kullanabilirsiniz
-exec grep "hello" {} +
parantez çifti dosya adlarını temsil eder. İyi öneri.
Yinelemeli aramaya ihtiyacınız varsa, çeşitli seçenekleriniz vardır. Düşünmelisinack
.
Bu başarısız olursa, GNU'nuz varsa find
ve xargs
:
find . -name '*.cc' -print0 -o -name '*.h' -print0 | xargs -0 grep hello /dev/null
Kullanımı, /dev/null
dosya adlarının yazdırılmasını sağlar; -print0
ve-0
boşluklar içeren dosya adları (yeni satırlar, vs) ile fırsatlar.
Obstreperous adlarınız yoksa (boşluklar vb.), Şunları kullanabilirsiniz:
find . -name '*.*[ch]' -print | xargs grep hello /dev/null
Bu, desen eşleşmesi daha bulanık (ancak daha basit), ancak aksi takdirde işe yaramadığı için, amaçlamadığınız birkaç adı alabilir. Ve find
ve GNU olmayan sürümleri ile çalışır xargs
.
find ... -exec grep "hello" {} +
Sorunuzu dikkatle okursam, "grep " içinde "hello" dizesini içeren tüm dosyaları arar ve yalnızca .h ve .cc dosyalarını görüntüler ". Kesin gereksinimlerinizi karşılamak için burada benim teslim:
Bu, dosya adlarını görüntüler:
grep -lR hello * | egrep '(cc|h)$'
... ve bu dosya adlarını ve içeriğini gösterir:
grep hello `grep -lR hello * | egrep '(cc|h)$'`
grep -l hello **/*.{h,cc}
shopt -s nullglob
.H veya .cc dosyası yoksa hata iletilerinden kaçınmak isteyebilirsiniz .
En basit yol: grep -Ril "Metniniz" /
grep -si "hello" --include=*.{cc,h} ./* ./.*
(gizli dosyaları da arar). İşte bütün / gizli dosyalarda bir dize aramak için jenerik sürümü:grep -s "hello" * .*
. Belki en genel kullanışlı (ve en basit), "Merhaba" için bu aramalar olmayan tüm gizli dosyalar:grep -si "hello" ./*
Bu yazı sayesinde: askubuntu.com/a/777456