Мы используем отрицательный просмотр в регулярном выражении Perl, чтобы получить задержки > 1 мин.
perl -lane '
BEGIN{
$,=$";
$dly=qr/\bdelay=(?!00:(?:00:[0-5][0-9]|01:00))(?:\d\d:\d\d:\d\d)(?=,)/;
}
/$dly/ and print /\b(?:Hostname|sendmail)\S+|$dly/g;
' yourfile
sed -e '
# logic for selecting entries where delay > 1 min
/[ ]delay=[0-9][0-9]:[0-9][0-9]:[0-9][0-9],/!d
/[ ]delay=[0][0]:[0][0]:[0-5][0-9],/d
/[ ]delay=[0][0]:[0][1]:[0][0],/d
# we are here => delay > 1 min, now fish out the entries...
s/^/\n\n/
s/[ ]sendmail[^ ]*/\n&\n/; s/\(\n\n.*\)\n\(.*\)\n/\2\1/
s/[ ]delay=[^, ]*/\n&\n/; s/\(\n\n.*\)\n\(.*\)\n/\2\1/
s/[ ]Hostname=[^ ]*/\n&\n/; s/\(\n\n.*\)\n\(.*\)\n/\2\1/
s/\n\n.*//;s/^\s*//
' yourfile
sendmail[5857]: delay=00:02:34 Hostname=BY1PR0701MB1752.namprd07.prod.gmail.com]
sendmail[5478]: delay=00:01:17 Hostname=CY1PR07MB1448.namprd07.prod.googlemail.com]
sendmail[1295]: delay=00:03:31
GNU date
будет анализировать даты во многих форматах. Это также позволит вам выводить дату практически в любом желаемом формате. Однако такого понятия, как "формат даты сервера" не существует.
value='2017/01/11'
date --date "$value"
11 Jan 2017 00:00:00
date --date "$value" +'%a %b %d'
Wed Jan 11
В вашем примере вы, кажется, хотите перейти с даты в файле на «завтра». GNU date
тоже может это сделать:
date --date "$value + 1 day" +'%a %b %d'
Thu Jan 12
Дополнительная информация о параметрах форматирования доступна на странице руководства ( man date
).