Powiedzmy, że muszę znaleźć funkcję GetTypes()
we wszystkich plikach źródłowych C # ( .cs
) w katalogach / podkatalogach.
Użyłem grep -rn GetTypes *.cs
, ale wystąpił błąd grep: *.cs: No such file or directory
. Musiałem użyć grep -rn GetTypes *
, ale w tym przypadku pokazuje wszystkie pliki nie *.cs
tylko.
Jakiego polecenia należy użyć, aby znaleźć ciąg tylko w .cs
plikach?
Odpowiedzi:
Jeśli używasz powłoki bash ≥4, umieścić
shopt -s globstar
w twojej~/.bashrc
. Jeśli twoja powłoka to Zsh, jesteś dobry. Potem możesz biec**/*.cs
oznacza wszystkie pliki pasujące*.cs
do bieżącego katalogu lub jego podkatalogów rekurencyjnie.Jeśli nie korzystasz z powłoki, która obsługuje,
**
ale obsługuje grep--include
, możesz wykonać rekurencyjne grep i powiedzieć,grep
aby rozważać tylko pliki pasujące do określonych wzorców. Zwróć uwagę na cytaty wokół wzorca nazwy pliku: jest on interpretowany przez grep, a nie przez powłokę.Korzystając tylko z przenośnych narzędzi (niektóre systemy wcale tego nie mają
grep -r
), użyjfind
dla części przechodzenia do katalogu igrep
do wyszukiwania tekstu.źródło
globstar
rozwiązaniem dla aktualnego Bash 4+ powłoki, zastosowanie:shopt -s globstar
.Powinieneś sprawdzić billiant mały grep / znaleźć zamiennik znany jako
ack
. Jest specjalnie skonfigurowany do przeszukiwania katalogów plików kodu źródłowego.Twoje polecenie wyglądałoby tak:
źródło
Jeśli używasz GNU
grep
, możesz określić, które pliki mają zostać uwzględnione w rekursywnym przechodzeniu do katalogu:(gdzie ostatni okres oznacza bieżący katalog roboczy jako katalog główny przejścia)
źródło
Używam kombinacji find i grep:
Dla
find
, można zastąpić.
przez katalogu i usunąć-name
, jeśli chcesz wyglądać w każdym pliku.Dla
grep
,-bn
wydrukuje pozycję i numer linii i--color
pomoże twoim oczom, podkreślając to, czego szukasz.źródło