Я пытаюсь найти файлы вместе с соответствующим шаблоном пароля в заданном каталоге Linux, используя egrep. Шаблон, найденный в файлах, обычно выглядит следующим образом
password=value
pwd=value
pass=value
Совпадающий файл может содержать по крайней мере один из приведенных выше шаблонов для пароля. в любом месте файла.
Может быть одно или несколько мест или ни одного по обе стороны от знак =.
Значение может быть заключено в одинарные или двойные числа или не иметь цитаты, окружающие его.
Значение не может начинаться с фигурной скобки { или одного амперсанда & или двойной амперсанд &&
Примеры шаблонов, которые должны сопоставляться в файлах
password = "test123ABc#&$"
pwd=test123ABc#&$
pwd = 'test123ABc#&$'
pass = 'test123456&'
Примеры шаблонов, которые не должны совпадать в файлах
password=&testpw
pwd = "{test123@#"
password = "&&test123"
pass = {test123@
В настоящее время у меня есть эта команда egrep, где я пытаюсь найти подходящее выражение регулярного выражения для выполнения вышеуказанной задачи. Но мир регулярных выражений просто сбил меня с толку, хотя в Интернете есть ресурсы. Ценим любую помощь в этом.
egrep -HRi "<regex expression>" <path to directory>
Если PCRE разрешен, что можно включить с помощью флага -P в grep.
(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
Отличное выражение лица @Abhishek G помогло мне. Я использовал команду grep, чтобы найти шаблоны следующим образом. Мне нужно было избежать нескольких двойных кавычек в выражении с обратной косой чертой и убрать символ $ в конце.
grep -RiP "(password|pwd|pass) *= *+((? = ".*")\"[^&{][^\s]*\"|(?='.*')'[^&{][^\s]*'|(?=[^\"'{&].*)[^\s]*)" *.txt