Вопрос: Как найти файлы с определенным текстом в терминале


Я бы хотел найти все файлы, содержащие определенную строку текста. Как вы это сделаете в Терминале?


122
2017-07-13 09:42


Источник


Если вы хотите получить быстрый результат, используйте Spotlight. Также, если вы хотите найти файлы, которые не обязательно хранят текст непосредственно в файле, таком как PDF или ODF. - Joey
Хороший совет, но в моем случае я не уверен, что файлы индексируются, так как они находятся в сетевых драйверах. А также они представляют собой файлы xml, принадлежащие определенной программе. - Svish
Взгляни на unix.stackexchange.com/a/37932/213832 это решение работает хорошо - boyd4715


Ответы:


grep -r 'text goes here' path_goes_here

222
2017-07-13 09:47



Я бы предложил man grep открыть все прекрасные варианты grep - Ludovic Kuty
В нем перечислены все файлы, которые существуют в пути, и добавляет: No such file or directory  Я пытаюсь получить только список текстовых вхождений. Как мы можем получить этот список? - CP3O
Понял: grep -lr "text pattern" ./ -s ; grep -lr "text pattern" [PATH OF PARENT] -s - CP3O


использовать прожектор

mdfind "text goes here"
mdfind -onlyin /home/user/Desktop -live "live update"

не забудьте посмотреть:

man mdfind

23
2017-08-12 22:38



Будет ли это работать с файлами, которые прожектор не индексирует (т. Е. Файлы внутри скрытых папок, системные файлы конфигурации и т. Д.)? - Peter Berg
Греп, похоже, не разбирает файлы .xlsx, но это сработало хорошо. Еще один простой пример: mdfind -onlyin. "SearchText" - FvD


  1. Через Ак

brew install ack ack "text goes here"

  1. Через поиск

find . |grep "text goes here"

  1. Через grep

grep -RnslI "text goes here"


6
2018-03-03 14:07





Вы можете выбрать один из следующих вариантов в зависимости от вашего вкуса и потребностей. Предположим, вам нужно искать файлы, содержащие текст - «async», рекурсивно в текущем каталоге, вы можете сделать это одним из способов, как показано ниже:

Использование grep enter image description here

Использование ack enter image description here


1
2018-06-01 08:00





Ответ Игнасио очень велик и помог мне найти файлы, содержащие определенный текст. Единственная проблема, с которой я столкнулся, заключалась в том, что при запуске этой команды будут перечислены все файлы, в том числе те, в которых шаблон не отображался.

No such file or directory Это то, что я вижу рядом с файлами, которые не содержат шаблон.

Если вместо этого вы добавите -s к команде, как в: grep -lr "text pattern" ./ -s ; grep -lr "text pattern" [PATH DIRECTORY] -s , он покажет только, какие файлы содержат шаблон.

Аналогично, если grep -nr "text pattern" ./ -s ; grep -nr "text pattern" [PATH OF DIRECTORY] -s используется команда, которая печатает файл плюс номер строки и появление шаблона.

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

Ссылка: Как я могу grep не распечатывать ошибки «Нет такого файла или каталога»?


1
2018-06-01 15:27



Еще один способ избежать этих надоедливых Нет такого файла ошибки, - это передать stderr в null. grep ... 2>/dev/null, Это решение работает для большинства программ, поскольку они сообщают сообщения об ошибках потока stderr, а не stdout. Я использовал это решение много раз с find, как говорится Доступ запрещен для многих файлов. - jpaugh
(1) Если вы получаете No such file or directory сообщения для файлов, которые существуют, либо вы делаете что-то неправильно, либо ваша система нарушена. (2) Что [PATH OF PARENT] что-нибудь делать? - G-Man
@ G-Man Я отредактировал ответ, чтобы показать [PATH OF DIRECTORY] просто заставляйте кого-то незнакомого захотеть узнать, почему я поставил ./ - CP3O
@ G-Man Я использую mac не Ubuntu, не знаю, как моя система будет сломана, я пока ничего не сделал. - CP3O