在egrep中使用regex匹配文件中的密码模式



我试图在linux上使用egrep在给定目录下查找文件以及匹配的密码模式。在文件中找到的模式通常如下

  1. password=value
  2. pwd=value
  3. pass=value
  • 匹配的文件可以至少包含上述密码模式中的一种

  • 可以有一个空格在…的两边=标志。

  • 值可以括在single中两倍或没有引用周围。

  • 不能开始{单个&两倍或&,,

应该是的模式示例在文件

中匹配password = "test123ABc#&$"

pwd=test123ABc#&$

pwd = 'test123ABc#&$'

pass = 'test123456&'

不应该

的模式示例在文件 中匹配password=&testpw

pwd = "{test123@#"

password = "&&test123"

pass={test123@

我目前有这个egrep命令,我试图找到适当的正则表达式来执行上述任务。但是正则表达式的世界让我感到困惑,即使网上有资源。谢谢你的帮助。

egrep -HRi "<regex expression>" <path to directory>

@Abhishek G的出色表达对我起了作用。我使用grep命令查找如下模式。我必须用反斜杠转义表达式中的几个双引号,并在末尾删除$符号。

grep -RiP "(password|pwd|pass) *= *+((?=".*")"[^&{][^s]*"|(?='.*')'[^&{][^s]*'|(?=[^"'{&].*)[^s]*)"  *.txt

如果允许PCRE,则可以使用grep中的-P标志启用。

(password|pwd|pass) *= *+((?=".*")"[^&{][^s]*"|(?='.*')'[^&{][^s]*'|(?=[^"'{&].*)[^s]*)$

解释:

  • (password|pwd|pass) *= *+((?=".*")"[^&{][^s]*"|(?='.*')'[^&{][^s]*'|(?=[^"'{&].*)[^s]*)$
    • (password|pwd|pass)匹配指定的文字密码短语。
    • *= *+匹配任意数量的空格,后跟=,后跟任意数量的空格
    • ((?=".*")"[^&{][^s]*"|(?='.*')'[^&{][^s]*'|(?=[^"'{&].*)[^s]*)$
      • (?=".*")"[^&{][^s]*"
        • (?=".*")正向查找,查找"周围的任何字符
        • "[^&{][^s]*"匹配不以&{开头的字符串
      • (?='.*')'[^&{][^s]*'
        • (?='.*')正向查找,查找'周围的任何字符
        • '[^&{][^s]*'匹配不以&{开头的字符串
      • (?=[^"'{&].*)[^s]*
        • (?=[^"'{&].*)正向前看,如果字符串不以"'{&开头。
        • [^s]*匹配字符串
      • $匹配行尾

在这里试试https://regex101.com/r/oIEZSS/1