Поиск файла grep линукс

Содержание
  1. grep — поиск в Linux, примеры
  2. 1. Немного про grep
  3. 2. Базовый синтаксис команды grep
  4. 3. Как использовать grep для поиска в файлах
  5. 4. Рекурсивное использование grep
  6. 5. Использование grep для поиска только целых слов
  7. 6. Как искать несколько различных слов
  8. 7. Подсчет количества строк, содержащих вхождение
  9. 8. Инвертный поиск
  10. 9. Как выводить только имена файлов в которых есть включение слова
  11. 10. Поиск всех файлов содержащих слово во всех файлах и поддиректориях
  12. 11. Вывод строк перед и после найденного вхождения
  13. Урок 9. Поиск файлов по имени и содержимому командами grep и locate
  14. Консольный поиск в Linux: grep, find
  15. Текстовый поиск.
  16. Команда Grep в Linux (поиск текста в файлах)
  17. Командный синтаксис grep
  18. Искать строку в файлах
  19. Инвертировать соответствие (исключить)
  20. Использование Grep для фильтрации вывода команды
  21. Рекурсивный поиск
  22. Показать только имя файла
  23. Поиск без учета регистра
  24. Искать полные слова
  25. Показать номера строк
  26. Подсчет совпадений
  27. Бесшумный режим
  28. Основное регулярное выражение
  29. Расширенные регулярные выражения
  30. Поиск нескольких строк (шаблонов)
  31. Строки печати перед матчем
  32. Печатать строки после матча
  33. Выводы

grep — поиск в Linux, примеры

1. Немного про grep

Команда grep (global regular expression print) остается одной из наиболее универсальных команд в окружении командной строки Linux. Это происходит потому что grep является чрезвычайно мощной утилитой которая дает пользователям возможность сортировать ввод на основе сложных правил, тем самым делая ее популярным связующим звеном в конвейере команд. Grep в основном используется для поиска текста как в данных поступающих на стандартный вход, так и в указанных файлах на предмет строк содержащих указанные слова или подстроки.

2. Базовый синтаксис команды grep

Ниже представлены примеры использования grep с базовым синтаксисом:

3. Как использовать grep для поиска в файлах

Попробуем найти пользователя «vasya» в файле passwd. Для поиска в файле /etc/passwd информации о пользователе «vasya» необходимо использовать следующую команду:

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

4. Рекурсивное использование grep

Если у вас есть большое количество текстовых файлов в ряде директорий и поддиректорий, к примеру, конфигурационных файлов apache в /etc/apache2 и требуется найти файл где содержится определенный текст, то стоит использовать параметр -r чтобы осуществить рекурсивный поиск. То есть поиску будет осуществлен по всем файлам в иерархии директорий:

Также можно использовать этот параметр в верхнем регистре. То есть можно писать -R. Разница в том что при использовании -r не происходит обработка символических ссылок, а при использовании -R — происходит. Пример использования:

/etc/apache2/sites-available/debian-help.ru: ServerName debian-help.ru /etc/apache2/sites-available/debian-help.ru: ServerAlias www.debian-help.ru

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

ServerName debian-help.ru ServerAlias www.debian-help.ru

5. Использование grep для поиска только целых слов

Когда вы ищите qwe, grep выберет все вхождения данного сочетания, к примеру, qwerty, qwe123, 345qwerty и множество других комбинаций. Вы можете указать, чтобы grep выбирал только те строки, которые содержат точное включение в виде целого слова. Для этого используйте параметр -w:

6. Как искать несколько различных слов

Для поиска двух или более различных слов вы можете использовать команду egrep следующим образом:

Либо вариант с просто grep:

7. Подсчет количества строк, содержащих вхождение

grep может сообщать сколько строк содержат указанное сочетание. Для этого воспользуйтесь параметром -c (count):

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

8. Инвертный поиск

grep позволяет осуществлять поиск наоборот, то есть будут выведены все строки, кроме имеющих вхождение указанного слова и для этого используется параметр -v:

Можно исключить что-либо из вывода поиска применив конвейер:

9. Как выводить только имена файлов в которых есть включение слова

Для вывода только имен файлов нужно использовать параметр -l, к примеру, так:

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

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

11. Вывод строк перед и после найденного вхождения

Для вывода нескольких строк перед вхождением используется параметры -A, а после вождения -B.

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

Источник

Урок 9. Поиск файлов по имени и содержимому командами grep и locate

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

Читайте также:  Настройте windows hello чтобы изменить этот параметр как отключить

Поиск по имени файла:

locate [опции] имя_файла

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

Система индексирует абсолютно все файлы либо только определенные?

Абсолютно все файлы. Однако следует учитывать, что если файл новый, а система еще не успела его проиндексировать, то команда locate его не найдет.

То есть придется ждать пока она это сделает?

Необязательно. Можно принудительно обновить базу данных с помощью команды updatedb.

А где находится эта база данных?

Здесь — /var/lib/mlocate/mlocate.db . Необходимо обладать правами root для доступа к этому файлу.

Попробуем найти файлы, в имени которого присутствует слово user. Для этого введем следующую команду:

Чтобы имя файла точно соответствовало заданному шаблону поиска достаточно ввести:

locate -b user либо locate —basename user

Для того, чтобы не учитывать регистр (то есть заглавные и прописные буквы в имени файла) достаточно ввести:

locate -i имя_файла либо locate —ignore-case имя_файла

После этого система отобразит имена файлов с заглавными и прописными буквами.

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

Поиск фрагментов текста в текстовых файлах

Бывают ситуации, когда мы не знаем название файла, но знаем его содержимое. В данном случае будет полезна функция поиска файлов по его содержимому и в этом нам поможет следующая утилита:

grep [опции] шаблон файл

Для этого рассмотрим текстовый файл Linux.txt и попробуем найти слово configuration в его тексте:

grep configuration Linux.txt

Команда вывела сами строки, где встречается искомое слово.

А если текст содержит тысячи строк, то как найти эту строку в файле?

Для этого есть опция -n или —line-number.

grep -n configuration Linux.txt

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

А можно осуществить поиск в нескольких файлах или по всей системе?

Конечно, с помощью символов групповых операций.

К примеру, у нас 4 файла, в именах которых присутствует слово manual:

Какую команду введем? Конечно же grep -n configuration *manual*.txt

Как видно сначала выводится название файла, за ним номер строки и затем сама строка с искомым словом.

Ну а если у имен этих файлов нет общих слов, то как осуществить поиск?

Достаточно ввести grep -n configuration *.

Когда используется данная комбинация, то grep ищет только в текущем каталоге! То есть вложенные каталоги не учитываются.

Чтобы учесть и вложенные подкаталоги необходимо использовать опцию -R или —dereference-recursive.

Как мы уже заметили система уже выделила красным цветом искомое слово, чтобы лучше ориентироваться. Однако не всегда система по умолчанию выделяет цветом искомое слово. Поэтому в такой ситуации используем опцию —color=auto. Выглядет это так:

grep —color=auto configuration *

Ну а если вдруг понадобится знать в каких файлах находится искомый текст и ничего больше, то воспользуемся опцией -l либо —files-with-matches:

grep -Rl configuration *

Команду grep удобно использовать и с другими командами, например ls .

Допустим мы хотим отобразить только файлы с расширением txt . Для этого выполним ls | grep —color=auto txt

Вариантов применения grep с другими командами очень много и по мере прохождения курса можно придумать довольно интересные комбинации.

Для данной команды доступны следующие опции:

-i ( —ignore-case ) — не учитывается регистр

-w ( —word-regexp ) — при поиске учитывается целое имя, то есть отображаются записи, в точности соответствующие заданному шаблону.

-v ( —invert-match ) — инвертированный поиск, то есть будут отображаться только те записи, где искомое слово отсутствует.

Источник

Консольный поиск в Linux: grep, find

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

Начнем с простого. Я создал файл findmi , давайте его найдем. Собственно для этого есть мощная одноименная утилита find :

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

find [папка] [параметры] критерий шаблон

  • -name — поиск файлов по имени
  • -perm — поиск файлов в Linux по режиму доступа
  • -user — поиск файлов по владельцу
  • -group — поиск по группе
  • -mtime — поиск по времени модификации файла
  • -atime — поиск файлов по дате последнего чтения
  • -nogroup — поиск файлов, не принадлежащих ни одной группе
  • -nouser — поиск файлов без владельцев
  • -newer — найти файлы новее чем указанный
  • -size — поиск файлов в Linux по их размеру
Читайте также:  Window search assistant windows search

Показать все файлы в текущей директории :

Не учитывать регистр при поиске по имени:

Найти файлы, которые не соответствуют шаблону:

Найти все файлы размером 50 мегабайт:

От пятидесяти до ста мегабайт:

Это конечно не все возможности. Но их должно хватить для большинства ситуаций. Для более глубокого разбора утилиты вы можете почитать man .

Текстовый поиск.

Конечно все круто, а что делать если нам надо найти ошибкe в логах ? Или другу текстовую информацию в файле ? Конечно у нас есть просто мега утилита grep ))))

Игнорировать регистрозависимые слова -i :

Две разные строки внутри файла :

Точное совпадение слова -w :

-n — отображать номер строки в файле;

Поиск в выводе команды:

Поиск в файлах по маске :

  • — include=\*. Любые файлы с разрешением txt,log .
  • -r Рекурсивный поиск .
  • -e Шаблон для поиска .

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

Источник

Команда Grep в Linux (поиск текста в файлах)

Команда grep означает «печать глобального регулярного выражения», и это одна из самых мощных и часто используемых команд в Linux.

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

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

Командный синтаксис grep

Синтаксис команды grep следующий:

Пункты в квадратных скобках необязательны.

  • OPTIONS — Ноль или более вариантов. Grep включает ряд опций , управляющих его поведением.
  • PATTERN — Шаблон поиска.
  • FILE — Ноль или более имен входных файлов.

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

Искать строку в файлах

Наиболее простое использование команды grep — поиск строки (текста) в файле.

Например, чтобы отобразить все строки, содержащие строку bash из файла /etc/passwd , вы должны выполнить следующую команду:

Результат должен выглядеть примерно так:

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

Инвертировать соответствие (исключить)

Чтобы отобразить строки, не соответствующие шаблону, используйте параметр -v (или —invert-match ).

Например, чтобы распечатать строки, не содержащие строковый nologin вы должны использовать:

Использование Grep для фильтрации вывода команды

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

Например, чтобы узнать, какие процессы выполняются в вашей системе как пользовательские www-data вы можете использовать следующую команду ps :

Вы также можете объединить несколько каналов по команде. Как вы можете видеть в выходных данных выше, также есть строка, содержащая процесс grep . Если вы не хотите, чтобы эта строка отображалась, передайте результат другому экземпляру grep как показано ниже.

Рекурсивный поиск

Для рекурсивного поиска шаблона вызовите grep с параметром -r (или —recursive ). Когда используется этот параметр, grep будет искать все файлы в указанном каталоге, пропуская символические ссылки, которые встречаются рекурсивно.

Чтобы следовать по всем символическим ссылкам , вместо -r используйте параметр -R (или —dereference-recursive ).

Вот пример, показывающий, как искать строку linuxize.com во всех файлах внутри каталога /etc :

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

Если вы используете опцию -R , grep будет следовать по всем символическим ссылкам:

Обратите внимание на последнюю строку вывода ниже. Эта строка не печатается, когда grep вызывается с -r потому что файлы внутри каталога с sites-enabled Nginx являются символическими ссылками на файлы конфигурации внутри каталога с sites-available .

Показать только имя файла

Чтобы подавить вывод grep по умолчанию и вывести только имена файлов, содержащих совпадающий шаблон, используйте параметр -l (или —files-with-matches ).

Приведенная ниже команда выполняет поиск по всем файлам, заканчивающимся на .conf в текущем рабочем каталоге и выводит только имена файлов, содержащих строку linuxize.com :

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

Параметр -l обычно используется в сочетании с рекурсивным параметром -R :

Поиск без учета регистра

По умолчанию grep чувствителен к регистру. Это означает, что символы верхнего и нижнего регистра рассматриваются как разные.

Чтобы игнорировать регистр при поиске, вызовите grep с параметром -i (или —ignore-case ).

Например, при поиске Zebra без какой-либо опции следующая команда не покажет никаких результатов, т.е. есть совпадающие строки:

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

Указание «Зебра» будет соответствовать «зебре», «ZEbrA» или любой другой комбинации букв верхнего и нижнего регистра для этой строки.

Искать полные слова

При поиске строки grep отобразит все строки, в которых строка встроена в строки большего размера.

Например, если вы ищете «gnu», все строки, в которых «gnu» встроено в слова большего размера, такие как «cygnus» или «magnum», будут найдены:

Чтобы вернуть только те строки, в которых указанная строка представляет собой целое слово (заключенное в символы, отличные от слов), используйте параметр -w (или —word-regexp ).

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

Показать номера строк

Параметр -n (или —line-number ) указывает grep показывать номер строки, содержащей строку, соответствующую шаблону. Когда используется эта опция, grep выводит совпадения на стандартный вывод с префиксом номера строки.

Например, чтобы отобразить строки из файла /etc/services содержащие строку bash префиксом совпадающего номера строки, вы можете использовать следующую команду:

Результат ниже показывает нам, что совпадения находятся в строках 10423 и 10424.

Подсчет совпадений

Чтобы вывести количество совпадающих строк в стандартный вывод, используйте параметр -c (или —count ).

В приведенном ниже примере мы подсчитываем количество учетных записей, в которых в качестве оболочки используется /usr/bin/zsh .

Бесшумный режим

-q (или —quiet ) указывает grep работать в тихом режиме, чтобы ничего не отображать на стандартном выводе. Если совпадение найдено, команда завершает работу со статусом 0 . Это полезно при использовании grep в сценариях оболочки, где вы хотите проверить, содержит ли файл строку, и выполнить определенное действие в зависимости от результата.

Вот пример использования grep в тихом режиме в качестве тестовой команды в операторе if :

Основное регулярное выражение

GNU Grep имеет три набора функций регулярных выражений : базовый, расширенный и Perl-совместимый.

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

Ниже приведен список наиболее часто используемых метасимволов:

Используйте символ ^ (каретка) для сопоставления выражения в начале строки. В следующем примере строка kangaroo будет соответствовать только в том случае, если она встречается в самом начале строки.

Используйте символ $ (доллар), чтобы найти выражение в конце строки. В следующем примере строка kangaroo будет соответствовать только в том случае, если она встречается в самом конце строки.

Используйте расширение . (точка) символ, соответствующий любому одиночному символу. Например, чтобы сопоставить все, что начинается с kan затем имеет два символа и заканчивается строкой roo , вы можете использовать следующий шаблон:

Используйте [ ] (скобки) для соответствия любому одиночному символу, заключенному в квадратные скобки. Например, найдите строки, содержащие accept или « accent , вы можете использовать следующий шаблон:

Используйте [^ ] для соответствия любому одиночному символу, не заключенному в квадратные скобки. Следующий шаблон будет соответствовать любой комбинации строк, содержащих co(any_letter_except_l)a , например coca , cobalt и т. Д., Но не будет соответствовать строкам, содержащим cola ,

Чтобы избежать специального значения следующего символа, используйте символ (обратная косая черта).

Расширенные регулярные выражения

Чтобы интерпретировать шаблон как расширенное регулярное выражение, используйте параметр -E (или —extended-regexp ). Расширенные регулярные выражения включают в себя все основные метасимволы, а также дополнительные метасимволы для создания более сложных и мощных шаблонов поиска. Вот несколько примеров:

Сопоставьте и извлеките все адреса электронной почты из данного файла:

Сопоставьте и извлеките все действительные IP-адреса из данного файла:

Параметр -o используется для печати только соответствующей строки.

Поиск нескольких строк (шаблонов)

Два или более шаблонов поиска можно объединить с помощью оператора ИЛИ | .

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

В приведенном ниже примере мы ищем все вхождения слов fatal , error и critical в файле ошибок журнала Nginx :

Если вы используете опцию расширенного регулярного выражения -E , то оператор | не следует экранировать, как показано ниже:

Строки печати перед матчем

Чтобы напечатать определенное количество строк перед совпадающими строками, используйте параметр -B (или —before-context ).

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

Печатать строки после матча

Чтобы напечатать определенное количество строк после совпадающих строк, используйте параметр -A (или —after-context ).

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

Выводы

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

Подробнее о Grep можно узнать на странице руководства пользователя Grep .

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Читайте также:  10 windows 10 ноутбук ssd ultrabook
Оцените статью