我想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/messagesauthpriv.* /var/log/securemail.* -/var/log/maillogcron.* /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 回答
PIPIONE
TA贡献1829条经验 获得超9个赞
您可以匹配以字母数字*
或.
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语法(+
例如,无需转义)。
- 1 回答
- 0 关注
- 320 浏览
添加回答
举报
0/150
提交
取消