Grep linux поиск строки

Содержание
  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. ИТ База знаний
  14. Полезно
  15. Навигация
  16. Серверные решения
  17. Телефония
  18. Корпоративные сети
  19. Руководство по команде grep в Linux
  20. Про Linux за 5 минут | Что это или как финский студент перевернул мир?
  21. Для чего мы пользуемся grep-ом?
  22. Поиск строк
  23. Поиск по нескольким параметрам
  24. Разница между grep, egrep fgrep, pgrep, zgrep
  25. Разница между find и grep
  26. Рекурсивный поиск
  27. Найти пробелы и табуляцию
  28. Использование регулярных выражений
  29. Команда Grep в Linux (Поиск текста в файлах)
  30. Grep Command in Linux (Find Text in Files)
  31. В этой статье мы покажем вам, как использовать grep команду, на практических примерах и подробных объяснениях наиболее распространенных grep опций GNU .
  32. grep Синтаксис команды
  33. Поиск строки в файлах
  34. Инвертировать (исключить) совпадение
  35. Использование Grep для фильтрации выходных данных команды
  36. Рекурсивный поиск
  37. Показывать только имя файла
  38. Поиск без учета регистра
  39. Поиск полных слов
  40. Показать номера строк
  41. Количество совпадений
  42. Скрытый режим
  43. Основное регулярное выражение
  44. Расширенные регулярные выражения
  45. Поиск по шаблону нескольких строк
  46. Печать строк перед сопоставлением
  47. Печать строк после сопоставления
  48. Вывод

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 после найденного вхождения используйте команду:

Читайте также:  Эмулятор сетевой карты windows 10

Источник

ИТ База знаний

Курс по Asterisk

Полезно

— Узнать IP — адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP — АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Серверные решения

Телефония

FreePBX и Asterisk

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

Корпоративные сети

Протоколы и стандарты

Руководство по команде grep в Linux

Читать между строк

10 минут чтения

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

Онлайн курс по Linux

Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps

Про Linux за 5 минут | Что это или как финский студент перевернул мир?

  • Для чего мы пользуемся grep-ом?

    Grep это утилита командной строки Linux, который даёт пользователям возможность вести поиск строки. С его помощью можно даже искать конкретные слова в файле. Также можно передать вывод любой команды в grep, что сильно упрощает работу во время поиска и траблшутинга.

    Возьмём команду ls. Сама по себе она выводит список всех файлов и папок.

    Но если нужно найти конкретную папку или один файл среди сотни других, то мы можем передать вывод команды ls в grep через вертикальную черту (|), а уже grep-у параметром передать нужное слово.

    Если команда grep ничего не вернула, значит искомого файла/папки не существует в данной директории.

    Поиск строк

    Если же нужно найти не одно слово, а словосочетание или целое предложение, то параметр команды grep должно быть выделено кавычками. Grep поддерживает как одинарные, так и двойные кавычки.

    Несмотря на то, что команда grep чаще используется как своего рода фильтр для других команд, но её также можно использовать отдельно как на примере ниже.

    В этом примере мы вели поиск указанных в кавычках слов в файле Students.txt и команда grep успешно справилась со своей задачей.

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

    Команде grep можно передавать не один параметр, а несколько. Для этого перед каждым аргументом пишется ключ e. Эту команду система понимает, как «или-или» и выводит все вхождения указанных слов. Заметьте, что кавычками выделена только строка, которая содержит пробел.

    Разница между grep, egrep fgrep, pgrep, zgrep

    Исторически разные версии Linux-а включали разновидности команды grep. Хотя в современных версия систем базовая команда grep поддерживает все возможности, которыми обладают egrep fgrep, pgrep, zgrep, но все же их тоже стоит рассмотреть.

    Как видно из вывода man grep (мануал по команде grep), все эти версии всего лишь разные названия основной команды. Например, egrep это тоже самое, что и grep E (помните, командная строка Linux регистрозависимая и команды grep e и grep E интерпретируются по разному). Этой команде в качестве шаблона передается расширенное регулярное выражение. Существует очень много разных ситуаций, где можно воспользоваться этой командой. Например, две команды ниже эквивалентны и выводят все строки, в которых есть две подряд идущих буквы «p».

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

    Команда pgrep используется для поиска конкретного процесса, запущенного в системе и возвращает идентификатор указанного процесса (PID). Команда ниже выводит PID процесса sshd. Почти такого же результата можно достичь если запустить команду ps e | grep sshd.

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

    Zgrep также работает с tar архивами, но ограничивается лишь выводом информации о том, нашла ли она соответствие или нет. Это замечание мы сделали потому, что чаще всего gzip-ом архивируются tar файлы.

    Разница между find и grep

    Те, кто только начинает пользоваться командной строкой Linux должны понимать, что find и grep это две разные команды, которые имеют совсем разные функции, даже если оба используются для «поиска» чего-либо.

    При поиске файлов grep-ом удобно пользоваться для фильтрации вывода команды find, как и было показано в начале материала. Но если нужно найти какой-то файл в системе по его названию или части названия (при этом используется маска *), то лучше всего обратиться к find. Она выведёт точно расположение искомого файла.

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

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

    Читайте также:  Windows лицензия для дома

    Найти пробелы и табуляцию

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

    Есть несколько путей вставки табуляции, но некоторые дистрибутивы могут не поддерживать их. Как известно, в командной строке Linux клавиша TAB сама по себе дополняет введённую команду. Но если комбинировать клавиши ctrl+v, а затем нажать TAB, то система воспримет это как знак табуляции. $ grep » » sample.txt

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

    Использование регулярных выражений

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

    [квадратные скобки] они используются чтобы проверить на соответствие одному из указанных символов.

    [-] знак дефиса означает диапазон значений. Это могут быть как буквы, так и цифры.

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

    ^ каретка используется для поиска строк, которые начинаются с указанного шаблона. Команда ниже выведет все строки, которые начинаются с буквы «А».

    [^] но между квадратными скобками смысл каретки меняется. Здесь он исключает из поиска следующие за ней символы или диапазон символов.

    $ знак доллара означает конец строки. Команда выведет только те строки, в конце которых встречает указанный шаблон.

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

    Источник

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

    Grep Command in Linux (Find Text in Files)

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

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

    grep ищет в одном или нескольких входных файлах строки, соответствующие заданному шаблону, и записывает каждую соответствующую строку в стандартный вывод. Если файлы не указаны, 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 ).

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

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

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

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

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

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

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

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

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

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

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

    Читайте также:  Как изменить имя пользователя windows 10 через командную строку

    Чтобы игнорировать регистр при поиске, 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 .

    Источник

  • Оцените статью