find . -name '*.java' | xargs grep <your pattern here>
Как я могу рекурсивно grep определенных файлов в каталоге?
9494
Eric Wilson
Я новичок в Linux и grep, и пытаюсь найти свой путь вокруг.
С помощью find -name *.java
я могу найти имена всех файлов Java в определенном каталоге. Предположим, я хочу посчитать, сколько раз foo
встречается в этих файлах, как бы я это сделал?
Я пробовал такие вещи, как:
grep -r "foo" *.java
и получать ответы вроде:
grep: *.java: No such file or directory
Есть идеи?
Dupe: http://superuser.com/questions/3512/
innaM 14 лет назад
2
Извините, в следующий раз я буду выглядеть сложнее. Примечательно, что вопросы были такими похожими.
Eric Wilson 14 лет назад
0
Название 3512 может быть намного лучше. «Основной вопрос об использовании grep» мало что говорит о реальном вопросе. У нас, вероятно, будет больше дуплей, если это не будет исправлено.
Richard Hoskins 14 лет назад
0
@richardhoskins, исправлено.
John T 14 лет назад
0
4 ответа на вопрос
- Популярные
- Новые
- С комментариями
- Активные
15
arathorn
Еще лучше, используйте элементы с нулевым символом в конце, чтобы имя файла с пробелом в нем не разбивалось на два имени файла: find. -name '* .java' -type f -print0 | xargs -0 grep
CoverosGene 14 лет назад
5
@CoverosGene: Вы можете использовать опцию --replace для xargs, чтобы справиться с этим - вот так: ... | xargs - заменить grep "{}"
arathorn 14 лет назад
1
большое спасибо, я знал, что должна быть команда, которая делает то, что делает `xargs`.
Eric Wilson 14 лет назад
0
6
user4126
Существует инструмент, специально разработанный для этого типа потребностей: ack .
ack - это инструмент, подобный grep, предназначенный для программистов с большими деревьями разнородного исходного кода.
Также прочитайте «10 главных причин использовать ack вместо grep». на странице подтверждения .
Мех. Настоящему инструменту Unix требуется рекурсивное имя, которое ссылается на его наследие ... например, abtg [ABTG's Better Than Grep], или что-то в этом роде. ACK? Единственная хорошая мысль об этом, что у автора улучшенного NACK уже выбрано имя;)
Mikeage 14 лет назад
1
Одна из причин, по которой я действительно люблю ack, заключается в том, что вы можете указывать типы файлов. Например, я с "ack --html"он ищет все мои файлы .html, .htm, .xhtml, .dhtml и т. д. за один раз.
Mark van Lent 14 лет назад
0
Ack в значительной степени заменил grep для меня.
Ryan Thompson 14 лет назад
0
3
Manatok
Как насчет:
grep -irn --include="*\.java" somePhrase *
0
wudeng
находить . -тип f -name '* .java' -print0 | xargs -0 grep -wo 'foo' | туалет
Добро пожаловать в SuperUser! Вы обнаружите, что ваши ответы привлекают больше внимания, когда речь идет о более актуальных вопросах (это вопрос 2009 года) и когда вы объясняете, почему ваш ответ лучше, чем уже принятый.
Eric Wilson 11 лет назад
3
@EricWilson спасибо за совет :)
wudeng 11 лет назад
0
Похожие вопросы
-
9
В чем разница между командами "su -s" и "sudo -s"?
-
4
Требуется хороший бесплатный образ Ubuntu Server VMWare
-
4
Каковы различия между основными дистрибутивами Linux? Я замечу?
-
-
2
Ограничить использование процессора для Flash в Firefox?
-
2
Как мне заставить мой микрофон работать под Debian GNOME?
-
2
Конки установки - образцы / идеи?
-
3
Каковы различия между оконными менеджерами Linux?
-
2
ThunderBird / Синхронизация освещения с SE k770i
-
4
Файловая система Linux
-
6
Полноэкранная медленная вспышка в KDE 4