在Linux下用egrep通过正则匹配文件中的密码格式
用egrep查找符合特定格式的密码字符串
需求说明
要查找的密码格式需满足以下规则:
- 前缀为
password、pwd或pass三者之一,后跟=(两侧可含任意数量空格)和对应值 - 值可以被单引号、双引号包裹,或者无引号
- 值不能以
{、&、&&开头
匹配示例
password = "test123ABc#&$" pwd=test123ABc#&$ pwd = 'test123ABc#&$' pass = 'test123456&'
不匹配示例
password=&testpw pwd = "{test123@#" password = "&&test123" pass={test123@
解决方案正则表达式
符合要求的正则表达式如下:
^\s*(password|pwd|pass)\s*=\s*(?:'(?!&|{)[^']*'|"(?!&|{)[^"]*"|(?!&|{)[^&\s{]+)\s*$
正则表达式说明
- 开头允许任意空白字符,精准匹配指定的三个前缀之一
- 匹配带任意空格的
=符号,兼容两侧有无空格的情况 - 分三种场景处理值的格式:
- 单引号包裹值:引号后不能以
&或{开头,内部为任意非单引号字符 - 双引号包裹值:规则与单引号场景一致
- 无引号值:不能以
&或{开头,为连续的非空格、非&、非{字符
- 单引号包裹值:引号后不能以
- 结尾允许任意空白字符,兼容行尾空格的情况
完整命令
将正则表达式代入egrep命令,最终可执行命令如下:
egrep -HRi '^\s*(password|pwd|pass)\s*=\s*(?:'\''(?!&|{)[^'\''*'\''|"(?!&|{)[^"]*"|(?!&|{)[^&\s{]+)\s*$' <path to directory>
注:由于Shell对单引号的转义要求,正则中的单引号需用
'\''转义,确保命令正常执行
内容的提问来源于stack exchange,提问作者pchegoor
相关产品推荐
相关产品推荐

