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

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

但是我认为我可能只用一个就能做到,而我只是缺乏技能。


潇湘沐
浏览 322回答 1
1回答

PIPIONE

您可以匹配以字母数字*或.chars开头的行,然后可以包含除空格以外的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+空格字符@-一个@字符。请注意,该-E选项允许使用POSIX ERE语法(+例如,无需转义)。
打开App,查看更多内容
随时随地看视频慕课网APP