Пошук тексту тексту в Linux


20

Я новачок linux. Мені потрібно шукати рядок "teststring" у всіх * .java-файлах, що знаходяться під / home / user1 / (включаючи вкладені папки). Як я можу це зробити в Linux через команду shell.


У командному рядку
виникло

Швидкий пошук виявив це питання: superuser.com/questions/208271/… не зовсім те, що ви шукаєте, але замість exec cp ви могли б
котити

Я можу перерахувати файл, що має розширення, з find / home / user1 -name * .java Як користуватися grep для цього?
darthvader

Відповіді:


23

Найпростіший спосіб - використовувати функції GNU grep:

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

Якщо ви коли-небудь користувалися іншим варіантом unix, який не має GNU grep, ось портативний спосіб:

find /home/user1 -name '*.java' -exec grep teststring {} +

приємно не знав про цю функцію
грепу

1
Якщо ви шукаєте поточний dir та всі файли, цеgrep -r teststring .
Chris Moschini,


4

Для цього ack aka ack-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.