我想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 /]#
但是我觉得我可能只用一个来做,我只是缺乏技能。
答案 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语法(无需转义+
,例如。)。