ћерион Ќетворкс

7 минут чтени€

»нтересным вопросом в Linux системах, €вл€етс€ управление регул€рными выражени€ми. Ёто полезный и необходимый навык не только профессионалам своего дела, системным администраторам, но, а также и обычным пользовател€м линуксоподобных операционных систем. ¬ данной статье € постараюсь раскрыть, как создавать регул€рные выражени€ и как их примен€ть на практике в каких-либо цел€х. ќсновной областью применение регул€рных выражений €вл€етс€ поиск информации и файлов в линуксоподобных операционных системах.

ƒл€ работы в основном используютс€ следующие символы:

  • "\text" - слова начинающиес€ с text
  • "text/" - слова, заканчивающиес€ на text
  • "^" - начало строки
  • "$" - конец строки
  • "a-z" - диапазон от a до z
  • "[^t]" - не буква t
  • "\[" - восприн€ть символ [ буквально
  • "." - любой символ
  • "a|z" - а или z

–егул€рные выражени€ в основном используютс€ со следующими командами:

grep - утилита поиска по выражению
  • egrep - расширенный grep
  • fgrep - быстрый grep
  • rgrep - рекурсивный grep
  • sed - потоковый текстовый редактор.

ј особенно с утилитой grep. ƒанна€ утилита используетс€ дл€ сортировки результатов чего либо, передава€ ей результаты по конвейеру. Ёта утилита осуществл€ет поиск и передачу на стандартный вывод результат его. ≈≈ можно запускать с различными ключами, но можно использовать ее другие варианты, которые представлены выше.

» есть еще потоковый текстовый редактор. Ёто не полноценный текстовый редактор, он просто получает информацию построчно и обрабатывает. ѕосле чего выводит на стандартный вывод. ќн не измен€ет текстовый вывод или текстовый поток, он просто редактирует перед тем как вывести его дл€ нас на экран.

Ќачнем со следующего. —оздадим один пустой файл file1.txt, через команду touch. —оздадим в текстовом редакторе в той же директории файл file.txt.

команду touch

 ак мы видим в файле file.txt просто набор слов. ƒалее мы с помощью данных слов посмотрим, как работают команды.


ѕерва€ команда - grep

man grep
man grep

ѕолучаем справку по данной команде.  ак можно пон€ть из справки команда grep и ее производные - это печать линий совпадающих шаблонов. ѕроще говор€, команда grep помогает сортировать те данные, что мы даем команде, через знак конвейера на ввод. ѕричем в мануале мы можем видеть egrep, fgrep и т.д. данные команды мы можем не использовать. »спользовать можно только grep с ключами различными, т.е. ключи просто замен€ют эти команды. ћожно на примере посмотреть, как работает данна€ команда. Ќапример, grep oo file.txt

grep oo file.txt

Ќа картинке видно, что команда из указанного файла выбрала по определенному шаблону "oo". ѕричем даже делает красным цветом подсветку. ћожно добавить еще ключик -n, тогда данна€ команда еще и выведет номер строки в которой находитс€ то, что ищетс€ по шаблону. Ёто полезно, когда работаем с каким-нибудь кодом или сценарием.  огда необходимо, что-то найти. —разу видим, где находитс€ объект поиска или что-то ищем по логам.

ѕри использовании шаблона очень важно понимать, что команда grep, чувствительна к регистрам в шаблонах. Ёто означает, что Boo и boo это разные шаблоны. ¬ одном случае команда найдет слово, а в другом нет. ћожно команде сказать, чтобы она не учитывала регистр. Ёто делаетс€ с помощью ключа -i.

ѕосмотрим содержимое нашего каталога командой ls, а затем отфильтруем только то, что заканчиваетс€ на "ile".

ѕосмотрим содержимое нашего каталога командой ls

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

просматриваем командой cat содержимое файла и подаем на ввод команде grep с фильтрацией по шаблону

Ќагл€дно можно посмотреть на рисунке выше. ћы просматриваем командой cat содержимое файла и подаем на ввод команде grep с фильтрацией по шаблону.

ƒавайте найдем файлы в которых содержитс€ сочетание "ple". grep ple file.txt в данном случае команда нашла оба слова содержащие шаблон. ƒавайте найдем слово, которое будет начинатьс€ с "ple".  оманда будет выгл€деть следующим образом: grep ^ple file.txt. «начок "^" указывает на начало строки. ѕротивоположна€ задача найти слова, заканчивающиес€ на "ple".  оманда будет выгл€деть следующим образом grep ple$ file.txt. “.е. примен€ть к концу строки, говорит значок "$" в шаблоне.

grep ple$ file.txt

ћожно дать команду grep .o file.txt. ¬ данном выражении знак "." , замен€ет любую букву.

grep .o file.txt

 ак вы видите вывод шаблона ".ple" вывел только одно слово т.к только слово couple удовлетвор€ло шаблону , т.к перед "ple" должен был содержатьс€ еще один символ любой.

ѕопробуем рассмотреть другую команду egrep.


egrep (Extended grep)

man egrep - отошлет к справке по grep.

ƒанна€ команда позвол€ет использовать более расширенный набор шаблонов. –ассмотрим следующий пример команды:

egrep '^(b|d)' file.txt

Ўаблон заключаетс€ в одинарные кавычки, дл€ того чтобы экранировать символы, и команда egrep пон€ла, что это относитс€ к ней и воспринимала выражение как шаблон. —ам же шаблон означает, что поиск будет искать слова, в начале строки (знак ^) содержащие букву b или d.

egrep '^(b|d)' file.txt

ћы видим, что команда вернула слова, начинающиес€ с буквы b или d. –ассмотрим другой вариант использовани€ команды egrep. Ќапример:

egrep '^[a-k]' file.txt
egrep '^[a-k]' file.txt

ѕолучим все слова, начинающиес€ с "a" по "к". «нак "[]" - диапазона.  ак мы видим слова, начинающиес€ с большой буквы, не попали. ¬се эти регул€рные выражени€ очень пригод€тс€, когда мы что-то ищем в файлах логах.

”сложним еще шаблон. ¬озьмем следующий:

egrep '^[a-k]|[A-K]' file.txt

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

egrep '^[a-k]|[A-K]' file.txt

¬от теперь все хорошо. —лова с «аглавными буквами тоже отобразились.

 ак вариант egrep можно запускать просто grep с ключиком -e.


ѕро fgrep

man fgrep - отошлет к справке по grep.  оманда fgrep не понимает регул€рных выражений вообще.

ѕолучаетс€ следующим образом если мы вводим: egrep c$ file.txt. “о команда согласно шаблону, ищет в файле букву "c" в конце слова. ¬ случае же с командой fgrep c$ file.txt, команда будет искать именно сочетание "с$". “.е. команда fgrep воспринимает символы регул€рных выражений, как обычные символы, которые ей нужно найти, как аргументы.

fgrep

–екурсивный rgrep

—оздадим каталог mkdir folder . —оздадим файл great.txt в созданной директории folder со словом Hello при помощью команды echo "Hello" folder/great.txt

» если мы скажем grep Hello * , поищи слово Hello в текущей директории. ѕолучитс€ следующа€ картина.

echo Hello folder/great.txt

 ак мы видим grep не может искать в папках. ƒл€ таких случаев и используетс€ утилита rgrep.

rgrep Hello *

ƒает следующую картину.

rgrep Hello *

—овершенно спокойно в папке найдено было, то что подходило под шаблон.

ƒанна€ утилита пробежалась по всем папкам и файлам в них и нашла подход€щее под шаблон слово. “.е. если нам необходимо провести поиск по всем файлам и папкам, то необходимо использовать утилиту rgrep.


 оманда sed

man sed - стрим редактор. “.е потоковый редактор дл€ фильтрации и редактировани€ потока данных.

man sed

Ќапример, sed -e ‘s/oo/aa’ file.txt - открыть редактор sed и заменить вывод всех oo на aa в файле file.txt. Ќужно понимать, что в результате данной команды изменени€ в файле не произойдут. ѕросто данные из файла будут вз€ты и с изменени€ми выведены на стандартный вывод, т.е. экран. ƒл€ сохранени€ результатов мы можем сказать, чтобы вывел в новый файл указав направление вывода.

sed -e ‘s/oo/aa’ file.txt   newfile.txt
ed Цe Сs/oo/aaТ file.txt  > newfile.txt

¬ данном редакторе мы можем ему сказать использовать регул€рные выражени€, дл€ этого необходимо добавить ключ -r. ” данного редактора очень большой функционал.


—кидки 50% в Merion Academy

¬ыбрать курс