远程日志记录条目的 Grep 系统日志配置
Grep syslog configuration for remote logging entries
我想 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 /]#
但是我觉得我可能一次就搞定,我就是技术不够。
您可以匹配以字母数字、*
或 .
个字符开头的行,然后可以有 0+ 个字符而不是空格,然后在任何 1+ 个字符之后有 @
空白字符:
grep -E '^[[:alnum:]*.]+[^[:space:]]*[[:space:]]+@' file
参见regex demo。
更具体一点的正则表达式看起来像
grep -E '^([[:alnum:]]+|\*)\.([[:alnum:]]+|\*)[^[:space:]]*[[:space:]]+@' file
参见 this regex demo。
图案详情
^
- 字符串开头
[[:alnum:]*.]+
- 1 个或多个字母数字字符、*
或 .
([[:alnum:]]+|\*)
- 1+ 个字母数字字符或 *
符号
\.
- 一个点
([[:alnum:]]+|\*)
- 1+ 个字母数字字符或 *
符号
[^[:space:]]*
- 除空白字符外的 0+ 个字符
[[:space:]]+
- 1+ 个空白字符
@
- 一个 @
字符。
请注意 -E
选项允许使用 POSIX ERE 语法(无需转义 +
,例如)。
我想 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 /]#
但是我觉得我可能一次就搞定,我就是技术不够。
您可以匹配以字母数字、*
或 .
个字符开头的行,然后可以有 0+ 个字符而不是空格,然后在任何 1+ 个字符之后有 @
空白字符:
grep -E '^[[:alnum:]*.]+[^[:space:]]*[[:space:]]+@' file
参见regex demo。
更具体一点的正则表达式看起来像
grep -E '^([[:alnum:]]+|\*)\.([[:alnum:]]+|\*)[^[:space:]]*[[:space:]]+@' file
参见 this regex demo。
图案详情
^
- 字符串开头[[:alnum:]*.]+
- 1 个或多个字母数字字符、*
或.
([[:alnum:]]+|\*)
- 1+ 个字母数字字符或*
符号\.
- 一个点([[:alnum:]]+|\*)
- 1+ 个字母数字字符或*
符号[^[:space:]]*
- 除空白字符外的 0+ 个字符[[:space:]]+
- 1+ 个空白字符@
- 一个@
字符。
请注意 -E
选项允许使用 POSIX ERE 语法(无需转义 +
,例如)。