Як знайти файли з певним текстом у Терміналі


168

Я хотів би знайти всі файли, що містять певний рядок тексту. Як би ти це зробив у Терміналі?


Якщо ви хочете швидкого результату, використовуйте Прожектор. Також якщо ви хочете знайти файли, які не обов'язково зберігають текст безпосередньо у файлі, наприклад, PDF або ODF.
Joey

Гарна порада, але в моєму випадку я не впевнений, що файли індексуються, оскільки вони є на мережевих драйверах. А також це файли xml, що належать до певної програми.
Свиш

Погляньте на unix.stackexchange.com/a/37932/213832 це рішення працює добре
boyd4715

Відповіді:


280
grep -r 'text goes here' path_goes_here

1
Я б запропонував man grepвідкрити всі чудові варіанти грепу
Людовик Куті

У цьому списку відображається кожен файл, який існує на шляху, і додається: No such file or directory Я намагаюся отримати лише список текстових подій. Як ми можемо отримати цей список?
CP3O

7
Зрозумів: grep -lr "text pattern" ./ -s; grep -lr "text pattern" [PATH OF PARENT] -s
CP3O

Але це повертає вміст відповідних файлів, а не деталі файлу (ім'я, шлях). @ Пропозиція CP3O працює.
геотеорія

28

використовувати прожектор

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

не забудьте подивитися:

man mdfind

2
Чи буде це працювати для файлів, які прожектор не індексує (тобто файли всередині прихованих папок, файли конфігурації системи тощо)?
Пітер Берг

Греп, здається, не розбирає файли .xlsx, але це вийшло чудово. Ще один простий приклад: mdfind -onlyin. "searchtext"
FvD

11
  1. Через Ack

brew install ack ack "text goes here"

  1. Через знахідку

find . |grep "text goes here"

  1. Через греп

grep -RnslI "text goes here"


4

Ви можете вибрати одне з наведених нижче, залежно від вашого смаку та потреб. Припустимо, вам потрібно шукати файли, що містять текст - "async", рекурсивно в поточному каталозі, ви можете зробити це одним із способів, як описано нижче:

Використання grep введіть тут опис зображення

Використання ack введіть тут опис зображення


2

Відповідь Ігнасіо чудова і допомогла мені знайти файли, що містять певний текст. Єдине питання, з яким я стикався, це те, що при виконанні цієї команди будуть перераховані всі файли, в тому числі і той, де шаблон не відображався.

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 не роздрукував помилки "Немає такого файлу чи каталогу"?


Ще один спосіб уникнути цих набридливих Немає таких помилок у файлі - це передати 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.