如何用正则匹配PAM文件行并提取deny配置分组信息?
PAM文件deny配置匹配正则方案
当前正则的问题
你提供的正则逻辑存在错误:
- 条件判断
(?(1) (deny\=(\d+))|(.*))中的分组1是匹配开头的auth required pam_faillock.so部分,只要该行是目标PAM规则,这个分组就必然匹配成功,条件永远为真,会强制尝试匹配deny=(\d+) - 当行中没有deny配置时,这两个分组不会被捕获,甚至可能导致整个正则匹配失败,无法满足第二行返回空分组的需求
正确的正则实现
使用以下正则即可完全满足你的需求:
^auth\s+required\s+pam_faillock\.so.*?(deny=(\d+))?
逻辑说明
^auth\s+required\s+pam_faillock\.so:精准匹配目标PAM规则的固定前缀.*?:非贪婪匹配前缀后的任意内容,确保不会跳过deny=配置(deny=(\d+))?:将deny=数字配置设为可选捕获分组(?表示该分组可出现0或1次):- 分组1捕获完整的
deny=X字符串 - 分组2捕获
deny=后的数字值
- 分组1捕获完整的
匹配验证
- 对第一行
auth required pam_faillock.so authsucc deny=4 even_deny_root unlock_time=1200:- 分组1:
deny=4 - 分组2:
4
- 分组1:
- 对第二行
auth required pam_faillock.so authsucc even_deny_root unlock_time=1200:- 分组1:空
- 分组2:空
内容的提问来源于stack exchange,提问作者EricStolz
相关产品推荐
相关产品推荐

