· С помощью sed получите список только процессов, связанных с виртуаль- ными терминалами с первого по четвертый.
· Произведите замену строки user в потоке, считанном из файла /etc/passwd,
на строку extrauser.
· Используя регулярное выражение ^.*bash и оператор &, получите заком- ментированный символом "решетка" список всех пользователей с оболоч- кой bash.
Регулярные выражения в awk
В awk регулярные выражения могут использоваться аналогично тому, как они применяются в sed — для указания строк, которые должны подлежать обра- ботке. Так, следующая команда выведет список только таких процессов в системе, которые были запущены в промежутке с 15:20 до 15:29.
Эта команда (см. пример 9.18) выводит два столбца из потока, генерируемого командой ps –ef, столбец с информацией о времени запуска процесса и столбец с именем команды, запустившей процесс.
В этом случае пришлось указать наличие пробельных символов до и после столбца со временем запуска команды, т. к. далее в выводе команды ps -ef находится столбец, показывающий суммарное время выполнения процесса процессором. Наличие дополнительных регулярных выражений для про- бельных символов сильно загромождает команду. Однако awk позволяет про- верять на соответствие регулярному выражению не только целые строки, этот редактор отлично справляется с проверкой отдельных полей строк. Да- лее приведен пример команды, которая выполняет ту же задачу, что и пре- дыдущая (пример 9.19).
Синтаксис этой команды намного яснее предыдущей: здесь проверяется сов- падение только пятого поля строки с регулярным выражением. Это достига- ется с помощью оператора ~, который требует удовлетворения данного поля регулярному выражению.
Наоборот, при необходимости можно получить список строк, не удовлетво- ряющих регулярному выражению, с помощью оператора !~. Например, ко- манда, приведенная в примере 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
Особо следует отметить, что awk не поддерживает обратных ссылок, а сим- вол группирования здесь используется лишь вместе с оператором перечисле- ния ИЛИ (инфикс |). Однако практически это и не требуется, т. к. в awk име- ется возможность представления строки в виде набора полей, которые можно сравнивать между собой.