В Emacs вы можете поместить эти строки в вашем файле инициализации:
(global-set-key [(control ?+)] 'text-scale-increase)
(global-set-key [(control ?-)] 'text-scale-decrease)
По умолчанию команды изменения размера шрифта находятся в меню, которое появляется на Shift + Button1 ( Button1 - это левую кнопку мыши).
Попробуйте это:
perl -nle'($time, $host) = /^(\S+)\s(?:\S+\s+){8}\S+="(\S+?)"/; print "$time $host"'
Выход:
2016-05-07T09:07:04.933343+00:00 jamaican.com
\S
означает не -пробел \s
— пробел (?:)
— логическая группа, которая не захвачена {8}
— пропущенные «слова» \S+="(\S+?)"
означает :пропустить до =
и захватить то, что находится между двумя "
кавычками ($time, $host) = /.../
назначает две захваченные группы $time
и $host
Вам необходимо захватить имя хоста с помощью второй группы захвата.
напр. используя ваш образец ввода:
$ cat test.log
2016-05-07T09:07:04.933343+00:00 heroku[router]: status=301 bytes=680 service=2698ms connect=1ms dyno=web.2 fwd="10.29.10.29" at=info host="jamaican.com" request_id=32fc8d88-99f8-4cc2-89f9-284d059eebf8 method=GET path="/blog"
Этот лайнер Perl One -извлекает как метку времени, так и поле имени хоста. Я также немного улучшил регулярное выражение, используя \d
для цифр со счетчиком совпадений для каждой.
$ perl -lne 'print "$1 $2" if (m/(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+\+\d{2}:\d{2}) ([^ ]+) /)' test.log
2016-05-07T09:07:04.933343+00:00 heroku[router]:
Другой вариант:
$ perl -lne 'print "$1 $2 $3" if (m/(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+\+\d{2}:\d{2}) ([^[]+)\[([^]]+)\]/)' test.log
2016-05-07T09:07:04.933343+00:00 heroku router
Я предположил, что вам нужно имя хоста локальной машины (Я даже не заметил host="jamaican.com"
часть записи журнала ). Вероятно, это не то, что вам нужно, поэтому, если вам нужно имя хоста, заключенное в двойные кавычки -после host=
, тогда:
$ perl -lne 'print "$1 $2" if (m/(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d+\+\d{2}:\d{2}).*host="([^"]+)"/)' test.log
2016-05-07T09:07:04.933343+00:00 jamaican.com
или (намного проще):
$ perl -lne 'print "$1 $2" if (m/(^\S+).*host="([^"]+)"/)' test.log
2016-05-07T09:07:04.933343+00:00 jamaican.com
Или извлеките метку времени, проанализируйте ее с помощью Date::Parse
и переформатируйте с помощью Date::Format
.
$ perl -MDate::Parse -MDate::Format -lne \
'if (m/(^\S+).*host="([^"]+)"/) {
print join(" ", time2str("%Y-%m-%d %R %z",str2time($1)), $2)
}' test.log
2016-05-07 19:07 +1000 jamaican.com
Обратите внимание, :метка времени была преобразована в местный часовой пояс (для меня, это +1000 или австралийское восточное стандартное время ). time2str()
по умолчанию использует местный часовой пояс, но вы можете задать ему третий аргумент (time2str(TEMPLATE, TIME [, ZONE])
), чтобы он выдавал время в любом другом поясе.
$ perl -MDate::Parse -MDate::Format -lne 'if (m/(^\S+).*host="([^"]+)"/) {
print join(" ", time2str("%Y-%m-%d %R %z",str2time($1),"+0"), $2)
}' test.log
2016-05-07 09:07 +0000 jamaican.com