Эта проблема была актуальна и для меня. Что самое интересное, -когда я закрыл сначала вручную пользовательскую сессию, а затем выключил систему, все прошло гладко, без каких-либо задержек. Сегодня я посвятил некоторое время решению проблемы и вот некоторые результаты. Проблема возникает из-за того, что при выключении система ожидает чего-то, что, по ее мнению, должно произойти. Само дело индивидуально для каждого отдельного случая. В моем случае было даже две проблемы, одну из которых я нашел. Система искала несуществующий жесткий диск. Как же так? Потому что я экспериментировал с некоторыми другими версиями Linux и выбрал для всех версий одно и то же дисковое устройство в качестве подкачки. При установке второго линукса изменился UUID устройства, но в системных файлах первого линукса он остался без изменений. Но, повторюсь, -это была моя проблема, у вас может быть совсем не так. После того, как я исправил вышеуказанную проблему, у меня осталась еще одна. Я потерял надежду и просто поддался искушению решить проблему грубой силой. Я изменил в файлах /etc/systemd/user.conf
и /etc/systemd/system.conf
параметр DefaultTimeoutStopSec
с 90 seconds
на 5 seconds
. Не забудьте раскомментировать строку (, чтобы убрать знак #
в начале строки с параметромDefaultTimeoutStopSec
).
Теперь все работает нормально, система очень быстро выключается.
Это возможно с awk
, но синтаксис REGEXP работает несколько иначе, чем логические операторы в стиле C
-. Предполагая, что вы хотите извлечь IP-адрес во всех упомянутых вами случаях, должно работать следующее:
awk '{if (match($0,/{(TCP|UDP|ICMP)} ([[:digit:]:.]{15})/,v)) print(v[2])}' logfile.txt
При этом используется функция match
из awk
для поиска строки TCP
, или UDP
, или ICMP
, за которой следует пробел, а затем IPv4 (, т.е. 15 символов, состоящих из цифр 0-9
. ] или период .
), и извлекает фактическое значение последней части регулярного выражения (, которое является частью -, сгруппированной в круглых скобках ), и сохраняет его во внутренней переменной массива awk
v
.
Если такое совпадение найдено, выводится v[2]
, которое является фактическим значением второго (...)
сгруппированного подвыражения -(, первое из которых является группой ИЛИ -для протоколов ). Обратите внимание, что для этого использования функции match()
требуется GNU Awk!
Обратите внимание, что, поскольку это простой оператор действия, в котором выполняется только одна операция, если выполняется условие (вызов match()
, возвращающий не -ноль ), его также можно было бы написать на обычный "<condition> { <actions> }
" -Синтаксис awk
, т.е.
awk 'match($0,/{(TCP|UDP|ICMP)} ([[:digit:]:.]{15})/,v)) {print v[2]}' logfile.txt