Настройка системного журнала Grep для записей удаленного ведения журнала - PullRequest
0 голосов
/ 03 мая 2018

Я хотел бы получить grep из моего файла конфигурации rsyslog, чтобы проверить, настроены ли записи удаленного ведения журнала.

Строки, которые я бы хотел привести в grep:

auth.*,authpriv.*               @loghost.example.com:10514 # One "@" means UDP
*.*                             @@loghost.example.com      # Two "@" means TCP

До сих пор мне удалось создать следующее регулярное выражение, которое приносит мне только строки, начинающиеся с набора букв или звездочки, за которыми следует точка, а затем другой набор символов или звездочка:

grep "^[A-Za-z|*]*\.[A-Za-z|*]" /etc/rsyslog.conf

Как мне заставить grep правильно определить остальную часть строки? Поскольку за строкой может следовать запятая, дополнительные символы, последовательность пробелов и знак "@", или за ней может следовать последовательность пробелов и знак "@".

Редактировать: Что я могу получить с моим текущим регулярным выражением:

[root@RHEL7lab /]# grep "^[A-Za-z|*]*\.[A-Za-z|*]" /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
auth.*,authpriv.*               @loghost.example.com:10514 # One "@" means UDP
*.*                             @@loghost.example.com      # Two "@" means TCP
[root@RHEL7lab /]#

Я хочу регулярное выражение, которое будет производить только последние две строки, показанные выше.

Мне удалось передать его другому grep следующим образом:

[root@RHEL7lab /]# grep "^[A-Za-z|*]*\.[A-Za-z|*]" /etc/rsyslog.conf | grep "\s@"
auth.*,authpriv.*               @loghost.example.com:10514 # One "@" means UDP
*.*                             @@loghost.example.com      # Two "@" means TCP
[root@RHEL7lab /]#

Но я думаю, что я мог бы сделать это всего за один раз, мне просто не хватает навыков.

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете сопоставить строки, которые начинаются с буквенно-цифровых символов, * или . символов, затем могут иметь 0+ символов, отличных от пробела, и затем иметь @ после любых 1+ символов пробела:

grep -E '^[[:alnum:]*.]+[^[:space:]]*[[:space:]]+@' file

См. Демоверсию regex .

Чуть более специфичное регулярное выражение будет выглядеть как

grep -E '^([[:alnum:]]+|\*)\.([[:alnum:]]+|\*)[^[:space:]]*[[:space:]]+@' file

См. это демо регулярных выражений .

Детали шаблона

  • ^ - начало строки
  • [[:alnum:]*.]+ - 1 или более буквенно-цифровых символов, * или .
  • ([[:alnum:]]+|\*) - 1+ буквенно-цифровых символов или символ *
  • \. - точка
  • ([[:alnum:]]+|\*) - 1+ буквенно-цифровых символов или символ *
  • [^[:space:]]* - 0+ символов кроме пробельных символов
  • [[:space:]]+ - 1+ пробельных символов
  • @ - @ char.

Обратите внимание, что опция -E позволяет использовать синтаксис POSIX ERE (не нужно экранировать +, например).

...