Поиск текстового шаблона в 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

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

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


2

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

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

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.