Linux grep точное совпадение

Точное совпадение с grep -x

Нужно вернуть номер искомой строки из файла (необходимо совпадение всей строки).

Использую скрипт вида

При -x не возвращается ничего. Без -x возвращает нужное значение, но необходимо точное совпадение.

А что ты передаешь в качестве второго параметра ы скрипт? Покажи всю команду запуска скрипта.

Нужно вернуть номер искомой строки из файла (необходимо совпадение всей строки).

дык у grep тоже есть ключ -n, как раз для данного случая.

вряд-ли. Может так поймёт:

Раз использует pipe — должен понимать, что grep не сможет отличить добавок cat -n. Скорее всего просто не заметил.

// смешивать awk c grep — не comme il faut, можно было так: awk ‘/^. $/ < print NR >‘

можно и так: sed -n ‘/^pattern$/=’

По-моему, лучше так:

т.е. сначала скрипту передавать искомую строку, потом (необязательно) — имена файлов. В результате можно делать так:

Источник

Примеры команды grep в Linux

Иногда пользователи сталкиваются с необходимостью осуществления поиска определенной информации внутри каких-либо файлов. Часто конфигурационные документы или другие объемные данные вмещают в себе большое количество строк, поэтому вручную отыскать нужные данные не получается. Тогда на помощь приходит одна из встроенных команд в операционные системы на Linux, которая позволит выполнить нахождение строк буквально за считанные секунды.

Используем команду grep в Linux

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

Подготовительные работы

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

    Запустите файловый менеджер и переместитесь в нужную папку.

Нажмите правой кнопкой мыши на требуемом файле и выберите пункт «Свойства».

Теперь запустите «Терминал» удобным методом, например, через меню или зажатием комбинации клавиш Ctrl + Alt + T.

Здесь перейдите к директории через команду cd /home/user/folder , где user — имя пользователя, а folder — название папки.

Задействуйте команду cat + название файла , если хотите просмотреть полное содержимое. Детальные инструкции по работе с этой командой ищите в другой нашей статье по ссылке ниже.

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

Стандартный поиск по содержимому

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

    В командной строке введите grep word testfile , где word — искомая информация, а testfile — название файла. Когда производите поиск, находясь за пределами папки, укажите полный путь по примеру /home/user/folder/filename . После ввода команды нажмите на клавишу Enter.

Читайте также:  Soundtheory gullfoss mac os

Осталось только ознакомиться с доступными вариантами. На экране отобразятся полные строки, а ключевые значения будут выделены красным цветом.

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

Как видите, на следующем скриншоте результат изменился и добавилась еще одна новая строка.

Поиск с захватом строк

Иногда пользователям необходимо найти не только точное совпадение по строкам, но и узнать информацию, которая идет после них, например, при отчете об определенной ошибке. Тогда правильным решением будет применить атрибуты. Впишите в консоль grep -A3 «word» testfile , чтобы включить в результат и три следующие строки после совпадения. Вы можете написать -A4 , тогда будут захвачены четыре строки, ограничений никаких не имеется.

Если вместо -A вы примените аргумент -B + количество строк , в результате отобразятся данные, находящиеся до точки вхождения.

Аргумент -С , в свою очередь, захватывает строки вокруг ключевого слова.

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

grep -B3 «word» testfile
grep -C3 «word» testfile

Поиск ключевых слов в начале и в конце строк

Надобность определения ключевого слова, которое стоит в начале или в конце строки, чаще всего возникает во время работы с конфигурационными файлами, где каждая линия отвечает за один параметр. Для того чтобы увидеть точное вхождение в начале, необходимо прописать grep «^word» testfile . Знак ^ как раз и отвечает за применение этой опции.

Поиск содержимого в конце строк происходит примерно по такому же принципу, только в кавычках следует добавить знак $, и команда обретет такой вид: grep «word$» testfile .

Поиск чисел

При поиске нужных значений пользователь не всегда имеет информацию касательно точного слова, присутствующего в строке. Тогда процедуру поиска можно производить через числа, что иногда значительно упрощает задачу. Надо лишь задействовать рассматриваемую команду в виде grep «5» testfile , где «5» — диапазон значений, а testfile — название файла для сканирования.

Анализ всех файлов директории

Сканирование всех объектов, находящихся в одной папке, называется рекурсивным. Юзеру требуется применить только один аргумент, который проведен анализ всех файлов папки и выведет на экран подходящие строки и их расположение. Понадобится ввести grep -r «word» /home/user/folder , где /home/user/folder — путь к директории для сканирования.

Голубым цветом будет отображаться место хранения файла, а если хотите получить строки без этой информации, присвойте еще один аргумент, чтобы команда получилась такой grep -h -r «word» + путь к папке .

Точный поиск по словам

В начале статьи мы уже говорили об обычном поиске по словам. Однако при таком методе в результатах будут высвечиваться дополнительные комбинации. Например, вы находите слово User, но команда отобразит еще и User123, PasswordUser и другие совпадения, если такие имеются. Чтобы избежать такого результата, присвойте аргумент -w ( grep -w «word» + имя файла или его расположение ).

Выполняется эта опция и при надобности поиска сразу нескольких точных ключевых слов. В таком случае введите egrep -w ‘word1|word2’ testifile . Обратите внимание, что в этом случае к grep добавляется буква e, а кавычки ставятся одинарные.

Поиск строк без определенного слова

Рассматриваемая утилита умеет не только находить слова в файлах, но и выводить строки, в которых отсутствует заданное пользователем значение. Тогда перед введением ключевого значения и файла добавляется -v . Благодаря ей при активации команды вы увидите только соответствующие данные.

Синтаксис grep собрал в себе еще несколько аргументов, о которых можно вкратце рассказать:

  • -I — показывать только названия файлов, подходящих под критерий поиска;
  • -s — отключить уведомления о найденных ошибках;
  • -n — отображать номер строки в файле;
  • -b — показывать номер блока перед строчкой.
Читайте также:  Что делает windows ответ

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

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

Помимо этой статьи, на сайте еще 12315 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Источник

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

Курс по Asterisk

Полезно

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

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

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

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

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

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

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

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

Телефония

FreePBX и Asterisk

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

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

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

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

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

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

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

Мини — курс по виртуализации

Знакомство с VMware vSphere 7 и технологией виртуализации в авторском мини — курсе от Михаила Якобсена

Про 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».

    Читайте также:  Главный обозреватель сети windows 10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Источник

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