Поиск текстового шаблона в Linux

20

Я новичок в Linux. Мне нужно искать строку «teststring» во всех * .java файлах, находящихся в / home / user1 / (включая подпапки). Как я могу сделать это в Linux с помощью команды оболочки.

Дарт Вейдер
источник
Возникло несколько вопросов относительно поиска в регулярных выражениях файлов в подкаталогах из командной строки
RobotHumans
быстрый поиск поднял этот вопрос: superuser.com/questions/208271/… не совсем то, что вы ищете, но вместо exec cp вы можете cat / grep что угодно
RobotHumans
Я могу перечислить файл с расширением с помощью find / home / user1 -name * .java. Как использовать grep для этого?
Дартвадер

Ответы:

23

Самый простой способ - использовать возможности GNU grep:

grep -r --include '*.java' teststring /home/user1

Если вы когда-либо использовали другой вариант Unix, в котором нет GNU grep, вот переносимый способ:

find /home/user1 -name '*.java' -exec grep teststring {} +
Жиль "ТАК - перестань быть злым"
источник
Ницца не знал об этой функции grep
RobotHumans
1
Если вы ищете текущий каталог и все файлы, этоgrep -r teststring .
Крис Москини
4

используя ack, вы просто набираете:cd /home/user01 && ack --java teststring

Benoit
источник
1
илиack --java teststring /home/user01
Энди Лестер
4

Для этого извед ака подтверждени Grep его приложения убийцы в моем уме;)

Вы можете ack some_string /in/path_yнайти some_string в path_y или проще ack some_other_stringнайти some_other_sting в текущем каталоге.

zzeroo
источник
2

Нашел это. Размещать это, как это может помочь кому-то

find /home/user01 -name *.java | xargs grep "teststring"

Пожалуйста, исправьте, если есть лучший способ.

Дарт Вейдер
источник
3
Как правило, вы должны использовать -print0и -0конвейеру findв xargsработать должным образом с файлами , которые могут иметь пробелы или символы новой строки в именах:find /home/user01 -name *.java -print0 | xargs -0 grep "teststring"
не Приостановлена до дальнейшего уведомления.