как найти слово в текстовых файлах из каталога [duplicate]

У этого вопроса уже есть ответ: Найти конкретное слово во всех файлах в и ниже текущей директории 2 ответа

Предположим, что у меня есть каталог с именем _file и включает в себя две подкаталога, такие как _1 и _2, и на каждом из них у меня есть текстовые файлы. Я хочу найти слово, подобное foo, в одном из этих текстовых файлов. Как я могу это сделать? Я хочу знать, какие текстовые файлы во всем каталоге содержат это слово?

1
задан 7 May 2014 в 17:07

3 ответа

Если вы не хотите устанавливать дополнительное программное обеспечение, вы можете просто использовать grep в терминале. Для рекурсивного поиска по каталогам вы можете использовать опцию -r (подробнее см. [F5]). Синтаксис, который вы ищете, вероятно:

grep -r "[STRING TO SEARCH FOR]" "[DIRECTORY TO SEARCH]"

Так, например, если я хочу искать строку «asdf» во всех файлах во всех подкаталогах «/ tmp / testdir /», команда выглядит следующим образом:

grep -r "asdf" "/tmp/testdir/"

Кавычки не являются строго необходимыми, но если ваш путь к строке или каталогу содержит пробелы, вам в противном случае придется маскировать их с помощью символа \ character ...

53
ответ дан 24 May 2018 в 08:03
  • 1
    Я хотел бы добавить, что на Xubuntu вам не нужно указывать каталог, если вы ищете текст в текущем рабочем каталоге. – Akash Agarwal 11 August 2016 в 10:22

Просто установите gnome-search-tool, используя sudo apt-get install gnome-search-tool Поиск в тире для поиска файлов и его запуска.

См. изображение ниже:

Оставьте поле «name contains» пустым. Выберите свою папку. Разверните раздел «Выбрать дополнительные параметры» и выберите «содержит текст», а затем нажмите «Добавить». Введите здесь текст, который вы хотите найти, и нажмите «Найти» в правом нижнем углу.

Наслаждайтесь.

7
ответ дан 24 May 2018 в 08:03

Вы можете использовать рекурсивный grep с флагом -l, чтобы печатать только имя файла, а не совпадающую строку:

grep -Rl foo .

Или вы можете использовать find: [!d1 ]

find . -type f -exec grep -l foo {} +

Или. вы можете использовать extglob и нормальный grep

shopt -s extglob
grep -l foo **/*
7
ответ дан 24 May 2018 в 08:03

Другие вопросы по тегам:

Похожие вопросы: