Bir dizindeki tüm dosyalarda bir metin dizisi aramak istiyorum (ve alt dizinleri değil; -r
seçeneğin bunu yaptığını biliyorum ama istediğim bu değil).
Koşu
grep "string" /path/to/dir
Bunu yapabilmek gerekiyordu, okudum ama bana hata veriyor:
grep: dir: Bir dizindir
Sonra,
grep
birden fazla dosya üzerinde çalışmayı denedim .grep "string" .bashrc .bash_aliases
Mükemmel çalışıyor.grep "string" .bash*
de amaçlandığı gibi çalışır.grep "string" *
bana hataları veriyor:grep: data: Is a directory grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory ...
Sadece hatalar yazdırılıyor, eşleşen satırları alamıyorum. Kullanmaya çalıştım-s
Seçeneği ama boşuna.
Yani benim sorularım:
Neden
grep
bir dizin üzerinde kullanamıyorum , (1) 'deki gibi ne zaman kullanmalıyım? İnternette birçok örnekte yapıldığını gördüm.
Düzenleme : "bir dizinde grep kullanma" derken, "alt dizinleri hariç o dizindeki tüm dosyaları ara" demiştim. Bir dosya yerine bir dizine geçtiğinizde grep'in yaptığı şeyin bu olduğuna inanıyorum. Yanlış mıyım?Lütfen bana
grep
(2) 'deki komutların davranışını açıklayan çalışmalarına ilişkin bir açıklama yapınız .
Düzenleme : Daha spesifik olalım. Neden jokerleri kullanarak çalışmak için.bash*
ve*
hatta aramasın diye aramak üzere birden fazla dosya belirtmek için kullanıyor./*
?Bir dizindeki tüm dosyaları (alt dizinlerini değil) kullanarak nasıl arayabilirim
grep
?
grep "string" .bash*
.
grep "string" * .* 2>/dev/null
yagrep -s "string" * .*
*
, küreselleşme olarak bilinen kabuk genişletme joker karakterlerine güveniyorsunuz . Küreselleşme,.bashrc
standart gibi bir nokta ile başlayan dosya adlarını içermez . Bu dosyaları içerecek şekilde kabuk seçeneklerini ayarlayabilirsiniz, ancak ne yaptığınızı bilmiyorsanız, kendinizi biraz karışıklığa bulaştırın. Dünyayı anlamak için iyi bir rehber burada bulunabilir mywiki.wooledge.org/glob