![如何使用 Windows“findstr”或其他实用程序来查找包含特定字符和特定长度的字符串的文件?](https://linux22.com/image/1620409/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Windows%E2%80%9Cfindstr%E2%80%9D%E6%88%96%E5%85%B6%E4%BB%96%E5%AE%9E%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%9D%A5%E6%9F%A5%E6%89%BE%E5%8C%85%E5%90%AB%E7%89%B9%E5%AE%9A%E5%AD%97%E7%AC%A6%E5%92%8C%E7%89%B9%E5%AE%9A%E9%95%BF%E5%BA%A6%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我需要在整个文件系统中查找任何包含仅由 30 到 40 个连续字符组成的文本字符串的文件(即,它应该匹配 md5 哈希而不是 sha512 哈希),并且字符集为小写字母(az)或大写字母(AZ)或数字(0-9)。
findstr /S /i /R /m "^[a-z0-9]{30,40}$" *.txt
我尝试了上述操作,输出如下(我只是想先检查文本文件,看看是否能找到我想要的值);
FINDSTR:内存不足
我在看https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/findstr寻求指导,但我对 Windows 命令行没有太多经验。我知道我上面使用的范围 {30,40} 在文档中并没有真正提到,findstr
而这正是我真正挣扎的部分。
请注意,我不必使用findstr
,可以使用其他内置 Windows 实用程序或 PowerShell,只要通过命令行执行它就是唯一的要求。
答案1
您所追求的 PowerShell 版本是使用 Get-ChildItem 和 Get-Content cmdlet,使用 Select-String 或 RegEx,就像您现在使用的一样。
# Get specifics for a module, cmdlet, or function
(Get-Command -Name Get-Content).Parameters
(Get-Command -Name Get-Content).Parameters.Keys
Get-help -Name Get-Content -Examples
Get-help -Name Get-Content -Full
Get-help -Name Get-Content -Online
网络上有很多例子以及您可以按原样使用或调整以进行全局搜索和字符串选择的完整脚本。
甚至可以在 PowerShell 会话中直接访问 Microsoft 的 powershellgallery.com 中的模块。
Find-Module -Name '*string*' |
Format-Table -AutoSize
Version Name Repository Description
------- ---- ---------- -----------
1.7.2 Find-String PSGallery Find-String is a PowerShell script whose purpose is to emulate grep and/or ack by providing searching over text files.
...
1.1 Join-Strings PSGallery Provides a pipeline-ending cmdlet that will join all strings from the preceding pipeline.
2.0 StringManager PSGallery String manager tool to work with strings in multiple ways.
1.0.0.0 strings PSGallery Search strings in binary files.
至于匹配字符串长度和哈希匹配,没有办法用单行代码来完成,您将不得不编写更多代码进行比较。
请记住,这仅适用于文本文件。处理 Officer 文件或 pdf 需要付出更多努力和使用 3rdP 插件。