Linux grep регулярные выражения

В скриптах, применяемых для автоматизации и однострочниках часто применяются регулярные выражения позволяющих тем или иным образом отсортировать результата поиска — с регулярными выражениями часто работают при помощи утилит grep, sed и cut. В настоящем материале рассматриваются специфические для grep регулярные выражения.

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

Linux grep регулярные выражения

 

mcedit regex.txt

remote
support
remote-tech-support
remote-tech-support.ru

Remote-tech-support
Remote

I'm using Ubuntu
Linux is a great OS

 

 

grep регулярные выражения — базовое использование

grep remote regex.txt

remote
remote-tech-support
remote-tech-support.ru

 

grep -i remote regex.txt

remote
remote-tech-support
remote-tech-support.ru
ReMoTe
Remote-tech-support
Remote

 

grep [Rr]emote regex.txt

remote
remote-tech-support
remote-tech-support.ru
Remote-tech-support
Remote

 

Вместо первого знака в выражении подставляется любой из символов в квадратных скобках, поэтому ReMoTe в результатах поиска нет

 

Используя echo дописываем в файл несколько строк которые понадобятся для дальнейших экспериментов

echo Tommy >> regex.txt

echo Timmy >> regex.txt

echo timmy >> regex.txt

echo tommy >> regex.txt

 

grep -i Timmy regex.txt

Timmy
timmy

 

grep -i T[io]mmy regex.txt

Tommy
Timmy
timmy
tommy
Tommy

 

Начало и конец шаблона поиска в регулярных выражениях

Добавляем еще строки в файл

echo 'great place to learn is webs itr remote-tech-support' >> regex.txt

echo 'just astring that ends at remote' >> regex.txt

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

 

grep ^remote regex.txt

remote
remote-tech-support
remote-tech-support.ru

 

Применимы любые сочетания с правилами рассмотренными ранее

grep ^[Rr]emote regex.txt

remote
remote-tech-support
remote-tech-support.ru
Remote-tech-support
Remote

 

Знак $ на конце слова или выражения означает, что подпадание под regex будет только в случае если слово/выражение оканчивается символами, стоящими перед знаком доллара

 

grep ^[Rr]emote$ regex.txt

remote
Remote

 

grep emote$ regex.txt

remote
Remote
just astring that ends at remote

 

 

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

Добавим в файл строки, содержащие числа

echo 'random number 349287923747' >> regex.txt

echo 'today is march 16' >> regex.txt

 

Искать их можно следующим образом:

grep [0-9] regex.txt

random number 349287923747
today is march 16

 

Как и ранее возможны сочетания правил:

grep [0-9]$ regex.txt

random number 349287923747
today is march 16

 

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

grep [0-9][0-9][0-9]$ regex.txt

random number 349287923747

 

Следующая команда выведет все пустые строки в документе

grep ^$ regex.txt

 

Практическое применение команде можно найти инвертируя ее — в выводе будут все строки, содержащие какие-либо значения

grep -v ^$ regex.txt

 

Extended grep

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

grep -E '[A-Z][a-z]+\b' test.txt

 

Флаги grep

Помимо -E часто используются и другие флаги. Самые часто применяемые:

-F — не использовать регулярные выражения
-v — не учитывать при поиске регистр
-R -рекурсивный поиск по всех вложенных каталогах с переходом по символьным ссылкам
-r — рекурсивный поиск по всех вложенных каталогах без перехода по символьным ссылкам

 

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

Запись опубликована автором в рубрике Bash.