Jak szukać określonego tekstu w określonych typach plików? [duplikować]

13

Możliwa duplikat:
Jak mogę grepować w plikach źródłowych dla jakiegoś tekstu?

Jakie polecenie rekurencyjnie szuka określonego tekstu w określonych typach plików w bieżącym katalogu?

Phillip
źródło
Co chcesz zwrócić? linia na której jest tekst? nazwa pliku, w którym znajduje się tekst?
MaQleod,
@MaQleod: Byłoby dobrze (nazwa pliku + numer bielizny + fragment kodu), jeśli to możliwe.
Phillip,
@slhck: ack-grep nie jest zainstalowany; Nie mam uprawnień do instalacji.
Phillip,
1
Nie potrzebujesz ack-grep, możesz użyć przykładów z pytania na początek (tak jak powiedziałem), tj. find | xargs | grepWierszy. Dla konkretnego wyjścia man grepzawsze warto przeczytać.
slhck,
@slhck: Dzięki, więc zrobiłem grep -r --include=*.<type> "<string>" ., co zadziałało. Niestety strona manuala nie wspomina o kropce końcowej.
Phillip,

Odpowiedzi:

11
find . -type f -name '*.extension' | xargs grep "string"

To polecenie uruchamia find w katalogu lokalnym (.) Dla wszystkich plików o nazwach zgodnych ze wzorcem * .extension, a następnie uruchamia grep dla „string” w wynikach wyszukiwania . Zauważ, że find jest z natury rekurencyjny. Tak długo, jak możesz odróżnić żądane pliki od plików, których nie znasz na podstawie nazwy, powinno to działać dla Ciebie.

Fopedush
źródło
2
To zrywa z nazwami plików zawierającymi spacje, powinieneś skorzystać z print0opcji, aby być bezpieczniejszym.
slhck,
Tylko find -print0nie pomoże, użyj również xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo
0

Aby wyświetlić nazwę pliku, numer wiersza w określonym pliku i wiersz pojawia się tekst:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

Będzie działał tylko w bieżącym katalogu, ale dobrze go sformatuje.

MaQleod
źródło