Bir dizindeki tüm dosyalarda bir metin dizisi aramak istiyorum (ve alt dizinleri değil; -rseçeneğin bunu yaptığını biliyorum ama istediğim bu değil).
Koşu
grep "string" /path/to/dirBunu yapabilmek gerekiyordu, okudum ama bana hata veriyor:
grep: dir: Bir dizindir
Sonra,
grepbirden fazla dosya üzerinde çalışmayı denedim .grep "string" .bashrc .bash_aliasesMü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-sSeçeneği ama boşuna.
Yani benim sorularım:
Neden
grepbir 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/nullyagrep -s "string" * .*
*, küreselleşme olarak bilinen kabuk genişletme joker karakterlerine güveniyorsunuz . Küreselleşme,.bashrcstandart 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