Chcę przeszukiwać rekursywnie wszystkie pliki z katalogu, w którym jestem, w poszukiwaniu określonego ciągu.
próbowałem
grep -r -i my_string
i próbowałem w folderze testowym z dwoma małymi plikami, ale nie można było znaleźć łańcucha.
Czy istnieje jakiś specjalny sposób definiowania „zawiera” zamiast dopasowywania całego słowa?
grep -r -o -i "your_string" *
(z „cudzysłowami”).Odpowiedzi:
Czy szukasz nazwy pliku lub słowa w pliku? grep przeszukuje pliki, co wydaje się być tym, czego chcesz.
grep używa wyrażeń regularnych - w rzeczywistości to właśnie oznacza część „re”. Tak więc nie używa normalnych symboli wieloznacznych bash; to znaczy,
abc*
nie znalazłby słów zaczynających się od abc, znalazłby słowa zaczynające się od ab, a następnie zero lub więcej c następujących po. Ale tak, jeśli po prostu nadasz mu wzór, znajdzie go wszędzie, bez znajomości całych słów. Jeśli chcesz znaleźć całe słowa, musisz utworzyć wyrażenie regularne, aby to powiedzieć.Ale, podobnie jak większość poleceń, musisz umieścić nazwę (nazwy) plików na końcu polecenia, aby twój przykład po prostu siedział i czekał na nazwę pliku.
Jak powiedział @plink, użyj
(lub
*.*
inne specyfikacje plików). Błędy można zignorować. Jeśli otrzymujesz dużo błędów, możesz dołączyć2>/dev/null
do końca, co przekieruje stderr na urządzenie zerowe.źródło