grep все .java файлы в каталоге для конкретной строки

Как я искал бы все .java файлы простую строку (не regex) в текущем каталоге и всех подкаталогах на Mac OS X? Я просто хочу распечатать список имен файлов и имен каталогов то соответствие.

12
задан 06.08.2009, 19:51

7 ответов

И всегда популярный

find . -name '*.java' | xargs grep -l 'string'

РЕДАКТИРОВАНИЕ (Frank Szczerba):

Если Вы имеете дело с именами файлов или каталогами, которые имеют пробелы в них, самый безопасный способ сделать, это:

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

Всегда существует больше чем один способ сделать это.

19
ответ дан 07.12.2019, 11:46

Используйте grep, который лучше, чем grep, ack:

ack -l --java  "string" 
7
ответ дан 07.12.2019, 11:46

Это будет на самом деле использовать regex, если Вы будете хотеть, просто будете избегать метасимволов или будете выходить из них, и можно искать строки.

find . -iname "*.java" -exec egrep -il "search string" {} \;
4
ответ дан 07.12.2019, 11:46

Дайте этому движение:

grep -rl "string" */*java
0
ответ дан 07.12.2019, 11:46

Вы могли также использовать программу GUI как TextWrangler, чтобы сделать более интуитивный поиск, где опции находятся в интерфейсе.

0
ответ дан 07.12.2019, 11:46

Традиционный ответ UNIX был бы тем, который был принят для этого вопроса:

find . -name '*.java' | xargs grep -l 'string'

Это будет, вероятно, работать на файлы Java, но пробелы в именах файлов намного более распространены на Mac, чем в традиционном мире UNIX. Когда имена файлов с пробелами будут переданы через конвейер выше, xargs интерпретирует отдельные слова как различные имена.

То, что Вы действительно хотите, должно nul-разделить имена для создания границ однозначными:

find . -name '*.java' -print0 | xargs -0 grep -l 'string'

Альтернатива должна позволить, находят выполненный grep для Вас, как Mark предполагает, хотя тот подход медленнее при поиске больших количеств файлов (поскольку grep вызывается однажды на файл, а не однажды с целым списком файлов).

11
ответ дан 07.12.2019, 11:46
grep -rl --include="*.java" simplestring *
3
ответ дан 07.12.2019, 11:46

Теги

Похожие вопросы