Рассмотрим следующая строка журнала:
2019-04-20 21: 17: 57,505341, + 0000 [Web, 279,10.0.0.100] c4da4857-63b1-11a9-a00a-b0521699037b TCP RX ...
I хочу удалить временную метку 2019-04-20 21: 17: 57,505341, + 0000
в начале перед записью этой строки журнала с помощью rsyslog.
Я использовал заменитель свойств в шаблоне используя регулярное выражение для сопоставления всего, что находится после отметки времени, например:
template (name = "mylog" type = "string" string = "% timereported%% syslogtag%% pri-text%% msg: R, ERE, 1, ПУСТО: (\\ [. *) - конец% \ n ")
Обратите внимание на двойное значение \\
перед скобкой [
.
Если я использую только одиночный \
до того, как скобка выдает ошибку, rsyslog отлично работает с двойным \\
Я не очень разбираюсь в регулярных выражениях, но понимаю, что что специальный символ, такой как скобка [
, требует экранирования одного \
, чтобы он мог соответствовать литеральной скобке в строке журнала. Почему одиночный \
не работает в rsyslog, а двойной \\
- работает?
Я использую rsyslog v8.40.0 в Debian.
Что мне не хватает?
Вы правы насчет синтаксиса регулярного выражения, но вы должны помнить, что вы предоставляете его как строковую константу, поэтому вы также должны соблюдать правила для них, в которых указывается, что особые символы (включая обратную косую черту) экранируются обратной косой чертой. На странице, на которую есть ссылка, есть ссылка на онлайн-инструмент , который сделает за вас экранирование.