Я пытаюсь найти адрес электронной почты на моем жестком диске. Я знаю, что это должно быть что-то вроде:

b************m@e******.com

И вот почему я придумал это регулярное выражение:

b.{12}m@e.{6}.com

Я обнаружил, что findstr может быть полезен для этой работы, и попытался:

findstr /R b.{12}m@e.{6}\.com c:\*.*

Но он ничего не находит, даже если я добавил файл с адресом электронной почты, который должен соответствовать моему регулярному выражению, например, b8726ngs.poinm@e123456.com

2
asknomore 24 Апр 2017 в 17:26

2 ответа

Лучший ответ

Вместо этого вы можете попробовать сделать это с помощью следующей команды PowerShell (обратите внимание, в зависимости от того, с чего вы начали, это может занять много времени):

Get-ChildItem *.txt -Recurse -File | Where-Object { (Get-Content $_.FullName) -match "b.{12}m@e.{6}.com" }

Вы получите красные сообщения об ошибках для областей диска, к которым у вас нет прав доступа. Запустите PowerShell от имени администратора для максимально широкого поиска.

Добавьте путь к файлу в Get-ChildItem, чтобы при желании установить базовый каталог, в противном случае он начнется в том каталоге, в котором вы находитесь.

Объяснение параметров:

  • -Recurse ищет текущий каталог и все подкаталоги.
  • -File возвращает только файлы (не каталоги).
  • Get-Content $_.FullName получает содержимое каждого файла.
  • -match выполняет сравнение регулярных выражений.
0
Mark Wragg 24 Апр 2017 в 19:57

Есть регулярное выражение, а затем есть регулярное выражение. Похоже, findstr не очень мощный.

findstr /R "b............m@e......\.com" *.*

Это только на части findstr не работает.
Делайте это с соответствующими мерами предосторожности, например, внутри каталога, который содержит только читаемые файлы.

0
Yunnosch 24 Апр 2017 в 22:20