Сопоставление шаблона пароля в файлах с использованием регулярного выражения в egrep

Я пытаюсь найти файлы вместе с соответствующим шаблоном пароля в заданном каталоге Linux, используя egrep. Шаблон, найденный в файлах, обычно выглядит следующим образом

  1. password=value
  2. pwd=value
  3. 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>

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если 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

Другие вопросы по теме