Регулярные выражения в 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; просмотров: 1444;