Wyszukaj ciąg rekurencyjnie w bieżącym katalogu

15

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?

David
źródło
3
Spróbuj grep -r -o -i "your_string" *(z „cudzysłowami”).
pl1nk
dostaję kilka komunikatów o odmowie uprawnień, czy to po prostu ignoruje te pliki, ale kontynuuje sprawdzanie pozostałych?
David
Racja, te pliki są ignorowane.
pl1nk

Odpowiedzi:

27

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

grep -r -o -i "your_string" *

(lub *.*inne specyfikacje plików). Błędy można zignorować. Jeśli otrzymujesz dużo błędów, możesz dołączyć 2>/dev/nulldo końca, co przekieruje stderr na urządzenie zerowe.

Marty Fried
źródło
6
Dla tych ciekawych: -r oznacza rekurencyjny (tzn. Przegląda bieżący folder i WSZYSTKIE foldery w bieżącym folderze ORAZ wszystkie foldery w tym folderze ..... do nieskończoności), -o oznacza, że ​​nie wyświetla całej linii i -i to ignoruj ​​wielkość liter.
BKSpurgeon
@johnsnails Wstecz nie jest konieczny. Bardziej prawdopodobne jest, że wystąpi błąd formatowania na stosie wymiany podczas księgowania jako wbudowany blok kodu.
tom_mai78101,
Tak, to ma sens.
johnsnails