Grep w plikach z określonym rozszerzeniem w katalogu


11

Czy istnieje polecenie umożliwiające wyszukiwanie słowa kluczowego w plikach w katalogu o określonym rozszerzeniu?

Ciąg grep -irn "string" ./pathdaje rekurencyjne wyszukiwanie wszystkich plików w katalogu ./path. Moim szczególnym wymaganiem jest wyszukiwanie we wszystkich plikach ./pathz rozszerzeniem, takim jak*.h

Odpowiedzi:



10

S i (obrót) moduł SH Ell opcjonalnie jonów globstarpoleceniem

    shopt -s globstar

Spowoduje to, że **jako składnik nazwy pliku będzie oznaczać wszystko tutaj i poniżej. Więc path/**oznacza wszystko w pathkatalogu i jego podkatalogów . (Nie musisz ./tutaj pisać .) Następnie możesz użyć

grep -in "string" path/**/*.h

aby przeszukać wszystkie .hpliki do i poniżej path.


Można u nzad opcji z shopt -u.



3

Jeśli możesz zainstalować coś na swoim komputerze, sugeruję użycie ack .

Możesz zrobić z nim dokładnie to, czego potrzebujesz i wiele więcej. W przypadku użycia możesz:

# Depending of your system, you have to use one or the other
ack --hh -i string path
ack-grep --hh -i string path
  • --hh filtry dla plików h
  • -i ignoruje wielkość liter

Aby dowiedzieć się, które filtry plików są obsługiwane natywnie, uruchom polecenie ack --help=type.


Jest też ag , były klon potwierdzenia. Dawniej, ponieważ ich zestawy funkcji od tego czasu nieco się rozeszły.
8bittree

Nie znałem ag. Dzięki za udostępnienie.
AD

3

A co z tym?

find -L ./path -name "*.h" -exec grep -in "string" {} \;

Wyjaśnienie:

  • -L: śledź dowiązania symboliczne
  • -nazwa: za pomocą gwiazdki można opisać rozszerzenia
  • -w: to samo co twoja propozycja, ale „r” jest zastąpione findpoleceniem
  • {}: oznacza wynik findpolecenia
  • \; : w przypadku połączenia findz -exec, jest to specyfikator końca polecenia

1
Jak "*.h"działa Myślałbym, że to musi być'*.h'
Joe

Zawsze pracuję z podwójnymi cudzysłowami, nie sądzę, że to robi różnicę.
Dominique

0

Jeśli używasz gnu grep, to ma flagę, która robi dokładnie to, co chcesz:

grep -irn --include=\*.h "string" path

chociaż nie sądzę, że jest dostępny w innych greps.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.