Поиск внутри файлов linux


Поиск по содержимому файлов в Linux

Необходимо в каталоге найти файлы содержащие определенную фразу. Как это сделать? Думаю, многие не раз сталкивались с подобной проблемой, как необходимость найти в папке с файлами (а порой и подпапками, в которых тоже хорошо бы поискать) файл, зная кусочек его текста (ну, или догадываясь о нем). Я тоже много раз спотыкался об эту нужда и вот, наконец, собрался и написал небольшой скрипт на bash, выполняющий эту задачу. Не самой общераспространенной задачей, но всё же имеющей место быть, является поиск исполняемого файла программы. Она воспринимает в качестве параметра имя программы, а после выполнения выводит в терминал список с расположением одновременных файлов. Иногда может понадобится найти файл, в котором содержится определённая строчка или найти строку в файле, где есть нужное слово. В Linux всё это делается с помощью одной весьма простой, но в то же время мощной утилиты grep. С её помощью можно искать не только строчки в файлах, но и фильтровать вывод команд, и много чего ещё.

Содержание статьи

  • 1 Linux поиск по содержимому файлов командой grep
  • 2 Linux поиск по содержимому файлов командой find
  • 3 Linux поиск по содержимому файлов командой which
  • 4 Linux поиск по содержимому файлов командой locate

Linux поиск по содержимому файлов командой grep

Часто возникают ситуации, что нужно найти какой-нибудь текст, но вы не помните, в каком файле/файлах он содержится. Секрет популярности — её мощь, она отдает возможность пользователям сортировать и фильтровать текст на основе сложных правил.

Команда grep (расшифровывается как global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU.

В этом варианте для поиска по содержимому файлов в каталоге можно использовать утилиту grep:

grep -r -n «text» /path

grep -r "Строчка для поиска"
grep -rl $'\xEF\xBB\xBF'

где:
-n показывает строку, где был найден фрагмент;
-r осуществляет розыск рекурсивно, в файлах в самом каталоге /path и в его подкаталогах;

Также можно приплюсовать опцию -C 3, чтобы видеть +- 3 строки вокруг (выше и ниже от найденной).

Дабы найти файл по его содержимому во всех Linux — подобных ОС, достаточно использовать утилиту find.

Linux поиск по содержимому файлов командой find

Своего рода швейцарским ножом в розыске файлов является команда find. Отметим, что она имеет множество опций, которые смогут кардинально изменять механизм поиска. Мы изложим лишь основные принципы, а с остальными способностями ознакомьтесь в справке по команде. Базовый принцип использования find состоит в указании папки поиска и опций. Например, выражение «find ~/ -name *.cpp» осуществит поиск файлов, имеющих продолжение «cpp» по всем каталогам, находящимся в личной директории пользователя.

/usr/bin/find /папка -type f -exec grep -H 'строчка для поиска' {} ;

Значение, указанное после опции -name, задает шаблон соотношения имени файла. Вы можете использовать опцию -type для указания типа файла, где в свойстве значений нужно использовать специальные буквы: d — директория, f — файл, l — символическая ссылка и т. д. Функции -user, -group и -size также довольно полезны. Их значениями являются имя пользователя, имя категории и размер файла в байтах.

find /var/www/ -name "file.conf"
find /var/www/ -name "*.conf"

С поддержкою опции -exec каждому файлу, предназначенному для установки соответствия, можно добавить случайную обработку. Таким образом, появляется возможность осуществления поиска, как по имени файла, так и по охватываемому. Ниже приводится пример комбинирования команды find и grep за счет использования функции -exec.

find ~/ -name *.cpp
find ~/ -name *.cpp -user 'my-username' -group 'my-group'
find ~/ -name '*.config' -type f -exec grep 'user' {} \;
find /home/ ( -name "*.php" -or -name "*.html" -or -name "*.js" )
-exec grep -lHEi $'\xEF\xBB\xBF' {} ;

А возможно и еще проще

Linux поиск по содержимому файлов командой which

Бригада which ищет только те файлы, у которых есть право на выполнение как программы. Розыск осуществляется по директориям, заданным в переменной окружения PATH. Содержимое переменной PATH сможет отличаться для различных пользователей. Чтобы охватить как можно большее количество системных директория, необходимо войти в систему под учетной записью администратора.

which cat
/bin/cat
which docker-stack
/home/username/.local/bin/docker-stack

Linux поиск по содержимому файлов командой locate

Поиск, производимый командой locate весьма быстр. Однако учитывайте тот факт, что системная база данных может быть не живой на момент осуществления операции. Механизм сканирования файловой системы, время его проведения и вобщем наличие такого инструмента может разниться в различных дистрибутивах Linux. Команда locate может быть полезна лишь при поиске файла по его имени. Однако для проверки текстового содержимого документов на вступление искомых данных нужно использовать другой инструмент.

Команда locate представляется альтернативой для find.

Данная команда, как правило, работает быстрее и может с легкостью производить поиск (в широком смысле — стремление добиться чего-либо, найти что-либо; действия субъекта, направленные на получение нового или утерянного (забытого): новой информации (поиск информации), данных,) по всей файловой системы. Linux имеет специальную команду grep, какая принимает шаблон для поиска и имя файла (именованная область данных на носителе информации). В случае нахождения совпадений, они будут выведены в терминал. В всеобщем виде выражение можно составить как «grep шаблон_поиска имя_файла». Чтобы отыскать файлы с помощью команды locate, просто используйте следующий синтаксис:

locate query

К образцу, чтобы возвращать только файлы, содержащие сам запрос, вместо того чтобы вводить каждый файл, который содержит запрос в ведущих к нему каталогах, можно утилизировать флаг –b (чтоб искать только basename, базовое имя файла):

locate -b query

Команды find и locate – отличные инструменты для поиска файлов в UNIX‐подобных операционных системах. Любая из этих утилит имеет свои преимущества. Мы рассмотрели использование команд для поиска и фильтрации вывода бригад в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках. Несмотря на то, что команды find и locate сами по себе очень мощны, их действие возможно расширить, комбинируя их с другими командами. Научившись работать с find и locate, попробуйте чистить их результаты при помощи команд wc, sort и grep.

Поиск текста в файлах на LINUX

webmaster С. 26.04.2020 0 Comments

Сегодня в статье рассмотрим как можно выполнить поиск текста в файлах на Linux.

Возникаю такие ситуации, когда необходимо найти текст в файле или же какой либо файл. В Linux всё это можно сделать с помощью утилиты grep.

С помощью данной утилиты можно искать текст в файлах, фильтровать вывод команд и много чего ещё.

grep (global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU. Grep в считанные секунды найдёт файл, или текст в файле, или отфильтрует вывода другой утилиты.

1. ОПЦИИ

3. Примеры использования grep

ОПЦИИ

Давайте рассмотрим самые основные опции утилиты grep, которые помогут нам выполнять поиск текста в файлах:

  • -b — показывать номер блока перед строкой;
  • -c — подсчитать количество вхождений шаблона;
  • -h — не выводить имя файла в результатах поиска внутри файлов Linux;
  • -r — рекурсивный поиск;
  • -i — не учитывать регистр;
  • — l — отобразить имена файлов, в которых найден шаблон;
  • -n — показывать номер строки в файле;
  • -s — не показывать сообщения об ошибках;
  • -v — инвертировать поиск, выдавать все строки кроме тех, что содержат шаблон;
  • -w — искать шаблон как слово, окружённое пробелами;
  • -e — использовать регулярные выражения при поиске;
  • -An — показать вхождение и n строк до него;
  • -Bn — показать вхождение и n строк после него;
  • -Cn — показать n строк до и после вхождения.

Примеры использования

Давайте рассмотрим несколько примеров поиска текста внутри файлов с помощью grep.

Поиск текста в файле

В первом примере мы будем искать пользователя smirnov в файле расположенных по пути /home/passwd:

 grep smimrnov /home/passwd

Данная команда выдаст приблизительно вот такой результат:

/etc/passwd-:smirnov:x:1000:1000:Oleg Smirnov,,,:/home/smirnov:/bin/bash

Из данного вывода мы видим, что команда grep обнаружила в файле /etc/passwd пользователя smirnov и вывела сопутствующею информацию.

Поиск текста в файлах и директориях.

Давайте попробуем найти искомую комбинацию obu4alka.ru во всех файлах расположенных в директории /etc/nginx и её поддиректориях. Для этого нам необходимо воспользоваться рекурсивным поиском, опция -r:

grep -r "obu4alka.ru" /etc/nginx/

В выводе вы получим:

/etc/nginx/sites-available/obu4alka. ru.conf: server_name obu4alka.ru *.obu4aka.ru; /etc/nginx/sites-available/obu4alka.ru.conf: root /home/admin/www/obu4alka.ru/public_html; /etc/nginx/sites-available/obu4alka.ru.conf: access_log /var/log/nginx/obu4alka.ru.access.log combined; /etc/nginx/sites-available/obu4alka.ru.conf: error_log /var/log/nginx/obu4alka.ru.error.log error; ....

Поиск текста в файлах определенного слова.

Если вы ищете определённое слово в файлах, например mytext, то grep выведет также 123mytext, mytext123, 12mytext34 и тому подобные комбинации. Вы можете заставить утилиту искать по содержимому файлов в Linux только те строки, которые выключают искомые слова, воспользовавшись опцией -w:

grep -w "mytex" имя_файла

Поиск текста в файлах двух слов

Можно искать по содержимому файла не одно слово, а сразу два:

egrep -w 'smirnov|root' /etc/passwd

Команда выдаст результат по двум запросам:

root:x:0:0:root:/root:/bin/bash smirnov:x:1000:1000:Oleg Smirnov:/home/smirnov:/bin/bash

Вывод имени файла

Вы можете указать grep выводить только имя файла, в котором было найдено заданное слово с помощью опции -l. $' # вы можете прочитать разом все файлы и сделать фильтр grep cat * | grep 'текст для поиска' # поиск по целому слову egrep -w "SELECT" * поиск в списке файлов ls -i | grep -i text # рекурсивный поиск по всем папкам внутри родительской папки grep -R text *

Сегодня мы с вами рассмотрели использование команды grep для поиска и фильтрации вывода команд в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках.

Если есть вопросы, то пишем в комментариях.

Также можете вступить в Телеграм канал, ВКонтакте или подписаться на Twitter. Ссылки в шапке страницы.
Заранее всем спасибо!!!

RSS

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

0 0 голоса

Рейтинг статьи

Как использовать команду grep в UNIX / Linux {с примерами}

Введение

В этом руководстве подробно описаны наиболее полезные команды grep для систем Linux / Unix.

Пройдя все команды и примеры, вы узнаете, как использовать grep для поиска в файлах текста из терминала.

Предварительные условия

  • Linux или UNIX-подобная система
  • Доступ к терминалу/командной строке
  • Пользователь с правами доступа к нужным файлам и каталогам

Примечание: Строка не представляет собой строку текста, отображаемую на экране терминала. Строка в текстовом файле представляет собой последовательность символов до тех пор, пока не будет введен разрыв строки. Вывод команд grep может содержать целые абзацы, если параметры поиска не уточнены.

Что такое команда grep?

Grep — это аббревиатура от G lobal R egular E xpression P rint.

Grep — это инструмент командной строки Linux/Unix, используемый для поиска строки символов в указанном файле. Шаблон текстового поиска называется регулярным выражением. Когда он находит совпадение, он печатает строку с результатом. Команда grep удобна при поиске в больших файлах журналов.

Использование команды grep

В самой основной форме команда grep состоит из трех частей. Первая часть начинается с grep , за которой следует искомый шаблон. После строки идет имя файла, который ищет grep.

Простейший синтаксис команды grep выглядит следующим образом:

Команда может содержать множество параметров, вариантов шаблонов и имен файлов. Комбинируйте столько вариантов, сколько необходимо, чтобы получить нужные результаты. Ниже представлены самые распространенные команды grep с примерами .

Примечание. Grep чувствителен к регистру. Обязательно используйте правильный регистр при выполнении команд grep.

Поиск в файле

Чтобы напечатать любую строку из файла, содержащего определенный набор символов, в нашем случае phoenix в файле sample2 , выполните команду:

 grep  0phoenix 0 

Grep отобразит каждую строку, в которой есть совпадение со словом 9. 0019 феникс . При выполнении этой команды вы не получите точных совпадений. Вместо этого терминал печатает строки со словами, содержащими введенную вами строку символов. Вот пример:

Совет: Если ваш шаблон поиска включает символы, отличные от буквенно-цифровых, используйте кавычки. Это включает в себя пробелы или любой символ.

Для поиска в нескольких файлах

Для поиска в нескольких файлах с помощью команды grep вставьте имена файлов, которые вы хотите найти, разделенные пробелом.

В нашем случае команда GREP соответствует слову Phoenix в трех файлах Образец , Образец 2 и Образец 3 2020. sample3

Терминал печатает имя каждого файла, содержащего совпадающие строки, и фактические строки, содержащие требуемую строку символов.

Вы можете добавить любое количество имен файлов. Терминал печатает новую строку с именем файла для каждого совпадения, которое он находит в перечисленных файлах.

Совет: Обратитесь к нашей статье Команды Xargs, чтобы узнать, как использовать xargs с grep для поиска строки в списке файлов.

Искать все файлы в каталоге

Для поиска всех файлов в текущем каталоге используйте звездочку вместо имени файла в конце команды grep.

В этом примере мы используем nix в качестве критерия поиска:

 grep nix * 

Вывод показывает имя файла с nix и возвращает всю строку.

Для поиска только целых слов

Grep позволяет найти и распечатать результаты только для целых слов. Чтобы найти слово phoenix во всех файлах в текущем каталоге, добавьте -w к команде grep.

 grep -w phoenix * 

Эта опция печатает только строки с полным совпадением слов и именами файлов, в которых они были найдены:

это подстрока другого слова.

Если вы хотите найти несколько строк и шаблонов слов, ознакомьтесь с нашей статьей о том, как найти несколько строк, шаблонов или слов.

Игнорировать регистр при поиске Grep

Поскольку команды grep чувствительны к регистру, одним из наиболее полезных операторов для поиска grep является -i. Вместо того, чтобы печатать результаты только в нижнем регистре, терминал отображает результаты как в верхнем, так и в нижнем регистре. Вывод включает строки со смешанными регистровыми записями.

Пример этой команды:

 grep -i phoenix * 

Если мы используем оператор -i для поиска файлов в текущем каталоге для phoenix , результат будет выглядеть следующим образом:

Для поиска в подкаталогах 90 подкаталоги в поиске, добавьте в команду grep оператор

-r .

 grep -r phoenix * 

Эта команда выводит совпадения для всех файлов в текущем каталоге, подкаталогах и точный путь с именем файла. В приведенном ниже примере мы также добавили -w оператор для отображения целых слов, но форма вывода такая же.

Inverse grep Search

Вы можете использовать grep для вывода всех строк, которые не соответствуют определенному шаблону символов. Чтобы инвертировать поиск, добавьте -v к команде grep.

Чтобы исключить все строки, содержащие phoenix , введите:

 grep -v phoenix sample 

Терминал распечатает все строки, не содержащие слова, используемого в качестве критерия поиска. Используйте -i для игнорирования регистра, чтобы полностью исключить слово, используемое для этого поиска:

Чтобы показать строки, которые точно соответствуют строке поиска

Команда grep печатает целые строки, когда находит совпадение в файле. Чтобы вывести только те строки, которые полностью соответствуют строке поиска, добавьте параметр -x .

 grep -x «phoenix number3» * 

Вывод показывает только строки с точным совпадением. Если в той же строке есть какие-либо другие слова или символы, grep не включает их в результаты поиска. Не забывайте использовать кавычки всякий раз, когда в шаблоне поиска есть пробел или символ.

Вот сравнение результатов без и с оператором -x в нашей команде grep:

Список имен совпадающих файлов слово или строка символов и исключить фактические строки. Чтобы напечатать только те имена файлов, которые соответствуют вашему запросу, используйте оператор

-l :

 grep -l phoenix * 

Вывод показывает точные имена файлов, которые содержат phoenix в текущем каталоге, но не печатает строки с соответствующим словом:

Напоминаем, что используйте оператор рекурсивного поиска -r , чтобы включить в поиск все подкаталоги.

Чтобы подсчитать количество совпадений

Grep может отображать имена файлов и количество строк, в которых он находит совпадения для вашего слова.

Используйте оператор -c для подсчета количества совпадений:

 grep -c phoenix * 

Чтобы отобразить количество строк до или после строки поиска

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

Используйте следующие операторы для добавления нужных строк до, после совпадения или и того, и другого:

  • Используйте -A и количество строк для отображения после совпадения: grep -A 3 phoenix sample - эта команда печатает три строки после совпадения.
  • Использовать -B и количество отображаемых строк перед совпадением: grep -B 2 phoenix sample - эта команда печатает две строки перед совпадением.
  • Используйте -C и несколько строк для отображения до и после совпадения: grep -C 2 phoenix sample - эта команда печатает две строки до и после совпадения.

Для отображения номеров строк с совпадениями grep

Когда grep выводит результаты с большим количеством совпадений, удобно видеть номера строк. Добавить -n оператор для любой команды grep, чтобы показать номера строк.

Мы будем искать Phoenix в текущем каталоге, покажем две строки до и после совпадений вместе с их номерами строк.

 grep -n -C 2 Пример Phoenix 

Ограничить вывод grep фиксированным числом строк

Отдельные файлы, такие как файлы журналов, могут содержать много совпадений с шаблонами поиска grep. Ограничьте количество строк в выводе grep, добавив -m опция и номер команды.

 grep -m2 Phoenix sample 

В этом случае терминал печатает первые два совпадения, найденные в файле sample .

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

Заключение

Теперь вы знаете как использовать grep 9Команда 0043 в Linux/Unix.

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

строка - Как я могу использовать grep для поиска слова внутри папки?

спросил

Изменено 1 год, 8 месяцев назад

Просмотрено 1,1 млн раз

В Windows я бы выполнил поиск слова внутри папки. Точно так же я хочу знать, встречается ли конкретное слово в каталоге, содержащем множество подкаталогов и файлов. Мои поиски синтаксиса grep показывают, что я должен указать имя файла, то есть grep string имя файла .

Я не знаю имени файла, что мне делать? Друг предложил сделать grep -nr string , но я не знаю, что это значит, и я не получил с ним никаких результатов (нет ответа, пока я не наберу Ctrl + C ).

  • строка
  • командная строка
  • grep
  • поиск по ключевым словам
  • поиск по файлам

0

 grep -nr 'yourString*' . 

Точка в конце ищет текущий каталог. Значение для каждого параметра:

 -n Показать относительный номер строки в файле 'yourString*' Строка для поиска, за которой следует подстановочный знак. -r Рекурсивный поиск в перечисленных подкаталогах . Каталог для поиска (текущий каталог) 

grep -nr 'MobileAppSer*' . (Найдет MobileAppServlet.java или MobileAppServlet. class или MobileAppServlet.txt ; 'MobileAppASer*.*' — еще один способ сделать то же самое.)

Чтобы проверить дополнительные параметры, используйте grep Команда .

5

 grep -nr строка my_directory 

Дополнительные примечания: это соответствует синтаксису grep [options] строка имя файла 9D также, что является комбинацией клавиш для конца файла).

3

GREP : Глобальная печать регулярных выражений/парсер/процессор/программа.
Вы можете использовать это для поиска в текущем каталоге.
Вы можете указать -R для "рекурсивного", что означает, что программа ищет во всех подпапках, их подпапках, подпапках их подпапок и т. д.

 grep -R "ваше слово" . 

-n напечатает номер строки, где он совпал в файле.
-i будет искать без учета регистра (заглавные/не заглавные буквы).

 grep -inR "ваш шаблон регулярного выражения" . 

2

Также есть:

 найти имя_каталога -тип f -print0 | xargs -0 grep -li слово 

, но это может быть слишком много для новичка.

find - это обходчик / список каталогов общего назначения, -type f означает «искать простые файлы, а не каталоги и именованные каналы и что у вас есть», -print0 означает "печатать их на стандартном выводе, используя нулевые символы в качестве разделителей". Вывод из find отправляется на xargs -0 , который получает стандартный ввод порциями (чтобы избежать ограничений на длину командной строки), используя нулевые символы в качестве разделителя записей (вместо стандартной новой строки), а затем применяет grep - li слово для каждого набора файлов. В grep , -l означает «перечислить совпадающие файлы», а -i означает «без учета регистра»; обычно вы можете комбинировать параметры одного символа, поэтому вы увидите -li чаще, чем -l -i .

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

2

 grep -nr search_string search_dir 

выполнит РЕКУРСИВНЫЙ (имеется в виду каталог и все его подкаталоги) поиск search_string. (как правильно ответил usta).

Причина, по которой вы не получали ответов на предложение вашего друга:

 grep -nr строка 

потому что каталог не указан. Если вы находитесь в каталоге, в котором хотите выполнить поиск, вам нужно сделать следующее:

 grep -nr string . 

Важно включить '.' символ, так как это говорит grep искать в ЭТОМ каталоге.

1

Почему бы не выполнить рекурсивный поиск, чтобы найти все экземпляры в подкаталогах:

 grep -r 'текст' * 

Это работает как шарм.

1

Аналогично ответу, опубликованному @eLRuLL, более простой способ указать поиск с учетом границ слов — использовать параметр -w :

 grep -wnr "yourString" . 

2

Другой вариант, который мне нравится использовать:

 find имя_папки -type f -exec grep your_text {} \; 

-type f возвращает вам только файлы, а не папки

-exec и {} запускает grep для файлов, которые были найдены при поиске (точный синтаксис: «-exec команда {}»).

  1. grep -r "ваша строка" * Найдет "свою строку" в любых файлах и папках

Теперь, если вы хотите искать две разные строки одновременно, вы всегда можете использовать опцию E и добавить слова для поиска. пример после разрыва

  1. grep -rE "yourstring|yourotherstring|$" * будет искать места в списке, где yourstring или yourotherstring соответствует

Выбранный вами ответ хорош, и он работает, но это неправильный способ, потому что:

 grep -nr yourString* . 

Это фактически ищет строку "yourString" и "g" 0 или много раз.

Итак, правильный способ сделать это:

 grep -nr \w*yourString\w* . 

Эта команда ищет строку с любым символом до и после в текущей папке.

1

 grep -R "строка" /каталог/ 

-R также следует за символическими ссылками, если -r нет.

Следующий пример рекурсивно ищет строку поиска в файлах *.xml и *.js , расположенных где-то внутри папок path2 , path3 и path4 .

 grep -r --include=*.xml --include=*.js "ваша строка поиска" path2 path3 path4 

Таким образом, вы можете искать в подмножестве файлов множество каталогов, просто указывая пути в конце.

Запустите (терминал) следующую команду внутри каталога. Он также будет рекурсивно проверять внутренние подкаталоги.


Learn more

Только новые статьи

Введите свой e-mail

Видео-курс

Blender для новичков

Ваше имя:Ваш E-Mail: