
Когда мы запускаем определенные команды в Unix / Linux для чтения или редактирования текста из строки или файла, мы чаще всего пытаемся отфильтровать вывод в заданный интересующий раздел. Вот здесь и пригодится использование регулярных выражений.
Читайте также:10 полезных операторов связывания в Linux с практическими примерами
Регулярное выражение можно определить как строки, представляющие несколько последовательностей символов. Одна из наиболее важных особенностей регулярных выражений заключается в том, что они позволяют фильтровать вывод команды или файла, редактировать раздел текстового или конфигурационного файла и т. Д.
Регулярные выражения состоят из:
(.)
он соответствует любому одиночному символу, кроме символа новой строки.(*)
он соответствует нулю или более существований ближайшего предшествующего ему символа.[ персонажи) ]
он соответствует любому из символов, указанных в символе (ах), можно также использовать дефис (-)
для обозначения ряда символов, таких как [а-е]
, [1-5]
, и так далее.^
он соответствует началу строки в файле.$
соответствует концу строки в файле.\
это escape-символ.Чтобы отфильтровать текст, нужно использовать инструмент фильтрации текста, такой как awk. Вы можете думать о awk как собственный язык программирования. Но в рамках данного руководства по использованию awk, мы рассмотрим его как простой инструмент фильтрации командной строки.
Общий синтаксис awk:
# awk имя_сценария.
Где 'сценарий'
это набор команд, которые понимают awk и выполняются в файле с именем filename.
Он работает, читая заданную строку в файле, делает копию строки, а затем выполняет сценарий в строке. Это повторяется во всех строках файла.
В 'сценарий'
находится в форме '/ шаблон / действие'
куда шаблон является регулярным выражением и действие это то, что будет делать awk, когда найдет заданный шаблон в строке.
В следующих примерах мы сосредоточимся на метасимволах, которые мы обсуждали выше в рамках возможностей awk.
В приведенном ниже примере печатаются все строки файла. /etc/hosts поскольку шаблон не указан.
# awk '//{print} '/ etc / hosts.
В приведенном ниже примере шаблон localhost
был задан, поэтому awk будет соответствовать строке, имеющей localhost в /etc/hosts
файл.
# awk '/localhost/{print} '/ etc / hosts
В (.)
будет соответствовать строкам, содержащим место, localhost, локальная сеть в примере ниже.
Так сказать * l some_single_character c *.
# awk '/l.c/{print} '/ etc / hosts.
Он будет соответствовать строкам, содержащим localhost, локальная сеть, линии, способный, как в примере ниже:
# awk '/l*c/{print} '/ etc / localhost.
Вы также поймете, что (*)
пытается найти максимально длинное совпадение, которое может обнаружить.
Давайте посмотрим на случай, который это демонстрирует, возьмем регулярное выражение т * т
что означает совпадение строк, начинающихся с буквы т
и закончить т
в строке ниже:
это tecmint, где вы получите лучшие хорошие учебные пособия, инструкции, руководства, tecmint.
При использовании шаблона вы получите следующие возможности /t*t/
:
Это т. это tecmint. это tecmint, где вы получите t. это tecmint, где вы получаете самое лучшее t. это tecmint, где вы получите лучшие хорошие уроки, как т. это tecmint, где вы получите лучшие хорошие учебные пособия, инструкции, руководства и т. д. это tecmint, где вы получите лучшие хорошие учебные пособия, инструкции, руководства, tecmint.
И (*)
в /t*t/
Подстановочный знак позволяет awk выбрать последний вариант:
это tecmint, где вы получите лучшие хорошие учебные пособия, инструкции, руководства, tecmint.
Возьмем, к примеру, набор [al1]
, здесь awk будет соответствовать всем строкам, содержащим символ а
или л
или 1
в строке в файле /etc/hosts.
# awk '/[al1]/{print} '/ etc / hosts.
Следующий пример соответствует строкам, начинающимся с K
или k
с последующим Т
:
# awk '/[Kk]T/{print} '/ etc / hosts
Понимать символы с помощью awk:
[0-9]
означает одно число[а-я]
означает соответствие одной строчной букве[А-Я]
означает соответствие одной заглавной буквы[а-я-я]
означает соответствие одной букве[a-zA-Z 0-9]
означает соответствие одной букве или цифреДавайте посмотрим на пример ниже:
# awk '/[0-9]/{print} '/ etc / hosts
Вся строчка из файла /etc/hosts содержать хотя бы одно число [0-9]
в приведенном выше примере.
Он соответствует всем строкам, которые начинаются с шаблона, представленного в примере ниже:
# awk '/^fe/{print} '/ etc / hosts. # awk '/^ff/{print} '/ etc / hosts.
Он соответствует всем строкам, которые заканчиваются предоставленным шаблоном:
# awk '/ab$/{print} '/ etc / hosts. # awk '/ost$/{print} '/ etc / hosts. # awk '/rs$/{print} '/ etc / hosts.
Это позволяет вам воспринимать следующий за ним символ как буквальный, то есть рассматривать его таким, какой он есть.
В приведенном ниже примере первая команда распечатывает всю строку в файле, вторая команда ничего не выводит, потому что я хочу сопоставить строку с $25.00, но escape-символ не используется.
Третья команда верна, поскольку для чтения использовался escape-символ. $ как есть.
# awk '//{print} 'deal.txt. # awk '/$25.00/{print} 'deal.txt. # awk '/\$25.00/{print} 'deal.txt.
Это еще не все awk инструмент фильтрации командной строки, приведенные выше примеры являются основными операциями awk. В следующих частях мы поговорим о том, как использовать сложные функции awk. Спасибо за чтение и за любые дополнения или пояснения, оставьте комментарий в разделе комментариев.