· Получите список всех учетных записей пользователей вашей системы, у кото- рых имя домашнего каталога (последнего каталога в пути) совпадает с име- нем пользователя.
· Проверьте, имеются ли в файле /var/log/messages (файл системного журна- ла) сообщения, у которых во времени совпадают часы и минуты (например, 09:09).
Использование регулярных выражений с sed
Регулярные выражения позволяют адресоваться к строкам, обрабатываемым sed. Регулярное выражение указывается в косых чертах. Так, например, для вставки строки-разделителя после учетных записей, использующих в качест- ве оболочки bash, с предварительным удалением строк учетных записей пользователей, использующих оболочки, имена которых не заканчиваются на sh, можно задать команду, приведенную в примере 9.15.
Опция -e команды sed используется для указания того, что дальше в ко- мандной строке будет задан сценарий sed (пример 9.15). Первый сценарий удаляет все строки, не заканчивающиеся на строку sh, а второй добавляет разделительную строку только после строк, заканчивающихся на bash.
Очень удобно использовать sed для замены строк в потоке, адресуясь к стро- кам с помощью регулярных выражений. Например, требуется заменить в по- токе, считанном из /etc/group, вхождения daemon в конце строк на angel (пример 9.16).
Пример 9.16. Замена с помощью регулярных выражений
$ sed 's/daemon$/angel/' /etc/group
К сожалению, sed работает только с очень ограниченным базовым набором регулярных выражений. Однако при замене подстрок имеется возможность вставлять в подстроку-замену исходную подстроку, удовлетворившую шаб- лону. Так, например, требуется вывести список всех файлов текущего ката- лога с суффиксом .txt так, чтобы к имени файлов была добавлена строка
.b ak (пример 9.17).
Пример 9.17. Обращение к найденной строке с помощью &
$ ls *.txt | sed 's/txt$/&.bak/' dir.txt.bak
distfiles.txt.bak ps.txt.bak
Для обращения к подстроке, удовлетворившей найденному регулярному вы- ражению, в sed используется оператор &.