我试图在linux上使用egrep在给定目录下查找文件以及匹配的密码模式。在文件中找到的模式通常如下
password=value
pwd=value
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