Регулярные выражения в awk

В awk регулярные выражения могут использоваться аналогично тому, как они применяются в sed — для указания строк, которые должны подлежать обра- ботке. Так, следующая команда выведет список только таких процессов в системе, которые были запущены в промежутке с 15:20 до 15:29.

 

Пример 9.18. Регулярные выражения в awk

 

$ ps -ef | awk '/[[:blank:]]15:2[0-9][[:blank:]]/{print $5,$8}' 15:20 /usr/lib/openoffice/program/soffice.bin

15:29 [kjournald]

 

Эта команда (см. пример 9.18) выводит два столбца из потока, генерируемого командой ps –ef, столбец с информацией о времени запуска процесса и столбец с именем команды, запустившей процесс.

В этом случае пришлось указать наличие пробельных символов до и после столбца со временем запуска команды, т. к. далее в выводе команды ps -ef находится столбец, показывающий суммарное время выполнения процесса процессором. Наличие дополнительных регулярных выражений для про- бельных символов сильно загромождает команду. Однако awk позволяет про- верять на соответствие регулярному выражению не только целые строки, этот редактор отлично справляется с проверкой отдельных полей строк. Да- лее приведен пример команды, которая выполняет ту же задачу, что и пре- дыдущая (пример 9.19).

 

Пример 9.19. Поиск регулярного выражения в поле

 

$ ps -ef | awk '$5~/15:2[0-9]/{print $5,$8}' 15:20 /usr/lib/openoffice/program/soffice.bin

15:29 [kjournald]

 

Синтаксис этой команды намного яснее предыдущей: здесь проверяется сов- падение только пятого поля строки с регулярным выражением. Это достига- ется с помощью оператора ~, который требует удовлетворения данного поля регулярному выражению.

Наоборот, при необходимости можно получить список строк, не удовлетво- ряющих регулярному выражению, с помощью оператора !~. Например, ко- манда, приведенная в примере 9.20, выдаст список только таких процессов, которые не были запущены с 15:20 до 15:29.


 

Пример 9.20. Инверсия регулярного выражения

 

$ ps -ef | awk '$5!~/15:2[0-9]/{print $5,$8}'

 

Команда awk позволяет работать с расширенным синтаксисом регулярных выражений. Так, например, можно получить список всех процессов, в ко- мандной строке которых есть bash или csh (пример 9.21).

 

Пример 9.21. Расширенные регулярные выражения в awk

 

$ ps -e | awk '$4~/(ba|c)sh/' 1749 pts/0 00:00:00 bash

7372 pts/0 00:00:00 csh

 

Особо следует отметить, что awk не поддерживает обратных ссылок, а сим- вол группирования здесь используется лишь вместе с оператором перечисле- ния ИЛИ (инфикс |). Однако практически это и не требуется, т. к. в awk име- ется возможность представления строки в виде набора полей, которые можно сравнивать между собой.

 








Дата добавления: 2015-06-12; просмотров: 1371;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.