regex - 用于远程日志记录条目的 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 /]#
但我认为我可能只用一次就可以做到,我只是缺乏技能。
解决方案
*
您可以匹配以字母数字或字符开头的行.
,然后可以有 0+ 字符而不是空格,然后@
在任何 1+ 空格字符之后:
grep -E '^[[:alnum:]*.]+[^[:space:]]*[[:space:]]+@' file
请参阅正则表达式演示。
更具体的正则表达式看起来像
grep -E '^([[:alnum:]]+|\*)\.([[:alnum:]]+|\*)[^[:space:]]*[[:space:]]+@' file
请参阅此正则表达式演示。
图案细节
^
- 字符串的开始[[:alnum:]*.]+
- 1 个或多个字母数字字符,*
或.
([[:alnum:]]+|\*)
- 1+ 字母数字字符或*
符号\.
- 一个点([[:alnum:]]+|\*)
- 1+ 字母数字字符或*
符号[^[:space:]]*
- 除空白字符外的 0+ 个字符[[:space:]]+
- 1+ 空白字符@
- 一个@
字符。
请注意,该-E
选项允许使用 POSIX ERE 语法(无需转义+
,例如)。
推荐阅读
- javascript - SSJS JS 解析 JSON 数据
- 2sxc - 无法修改 2sxc 内容
- auth0 - 使用大炮进行压力测试 - 使用登录流程获取 auth0 不记名令牌
- gravity-forms-plugin - 为什么重力表格提交后消失?
- elixir - 覆盖 Logger 以在输出中添加 __MODULE__
- java - 不能使用带有 Java 内置 Integer 的工具
- c# - Azure 存储休息 API(放置 Blob API)
- python - Python:函数中的常量变量值,而不是变量
- javascript - 变量css不适用于反应js
- java - 图像未显示在 firebase 的 recyclerview 中