Grep用于远程日志记录条目的syslog配置

时间:2018-05-03 15:24:36

标签: regex linux grep syslog

我想grep我的rsyslog配置文件来检查是否配置了远程日志记录条目。

我喜欢grep带来的界限如下:

10-2

到目前为止,我已设法生成以下正则表达式,它只带来以一组字母或星号开头的行,后跟一个点,然后是另一组字符或星号:

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

如何让grep正确识别其余部分?因为该行后面可以跟一个逗号,更多的东西,一系列空格和一个" @"签名或后面可以跟一系列空格和一个" @"登录。

编辑:到目前为止,我目前使用正则表达式得到了什么:

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 /]#

但是我觉得我可能只用一个来做,我只是缺乏技能。

1 个答案:

答案 0 :(得分:0)

您可以匹配以字母数字,*.字符开头的行,然后可以包含除空白之外的0 +字符,然后在任意1个以上的空白字符之后使用@

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

请参阅regex demo

更具体的正则表达式看起来像

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

请参阅this regex demo

模式详情

  • ^ - 字符串开头
  • [[:alnum:]*.]+ - 一个或多个字母,字母数字*.
  • ([[:alnum:]]+|\*) - 1个以上的字母数字字符或*符号
  • \. - 一个点
  • ([[:alnum:]]+|\*) - 1个以上的字母数字字符或*符号
  • [^[:space:]]* - 除了空白字符之外的0 +字符
  • [[:space:]]+ - 1+空白字符
  • @ - @字符。

请注意,-E选项允许使用POSIX ERE语法(无需转义+,例如。)。