Chcę wyszukać ciąg tekstu we wszystkich plikach w katalogu (a nie w jego podkatalogach; wiem, że -r
opcja to robi, ale nie tego chcę).
Bieganie
grep "string" /path/to/dir
powinienem to zrobić, przeczytałem, ale daje mi to błąd:
grep: dir: to katalog
Następnie próbowałem uruchomić
grep
na wielu plikach.grep "string" .bashrc .bash_aliases
działa świetnie.grep "string" .bash*
działa również zgodnie z przeznaczeniem.grep "string" *
daje mi błędy:grep: data: Is a directory grep: Desktop: Is a directory grep: Documents: Is a directory grep: Downloads: Is a directory ...
Drukowane są tylko błędy, nie otrzymuję pasujących linii. Próbowałem użyć tej -s
opcji, ale bezskutecznie.
Więc moje pytania:
Dlaczego nie mogę korzystać
grep
z katalogu, jak w (1), kiedy powinienem? Widziałem to w wielu przykładach w Internecie.
Edycja : Kiedy mówię „używając grep w katalogu”, mam na myśli „szukaj we wszystkich plikach w tym katalogu oprócz jego podkatalogów”. Uważam, że to właśnie robi grep, gdy przekazujesz do niego katalog zamiast pliku. Czy jestem w błędzie?Proszę o wyjaśnienie działania
grep
, które wyjaśniłoby zachowanie poleceń w (2).
Edycja : Pozwól mi być bardziej szczegółowy. Dlaczego za pomocą symboli wieloznacznych określa się wiele plików, w których ma być wyszukiwana praca,.bash*
a*
nawet nie, a nawet./*
?Jak mogę wyszukiwać wszystkie pliki w katalogu (a nie w jego podkatalogach) za pomocą
grep
?
grep "string" .bash*
również z .
grep "string" * .* 2>/dev/null
lubgrep -s "string" * .*
*
Opierasz się również na znakach wieloznacznych rozszerzających powłoki, takich jak globbing. Globowanie nie obejmuje nazw plików rozpoczynających się od kropki, takiej.bashrc
jak standardowa. Możesz ustawić opcje powłoki, aby zawierały te pliki, ale możesz wpaść w bałagan, jeśli nie wiesz, co robisz. Dobry przewodnik po zrozumieniu globowania można znaleźć tutaj mywiki.wooledge.org/glob