我正在尝试使用正则表达式搜索几个文本文件。当正则表达式匹配单行时,我设法让它工作,但是当我使用匹配一行和另一行结束的正则表达式进行测试时,它不起作用。
我读过你首先需要将整个文件读取到变量/数组然后进行正则表达式搜索。我没有设法让它发挥作用。
文件夹和文件的结构是
Root Folder ├─17-11-01 │ ├─trace-0.log │ └─trace-1.log └─17-11-02 ├─trace-0.log └─trace-1.log
我已设法获得文件的完整路径,但我不确定如何阅读文件的内容。我找到了[IO.File]::ReadAllText($Path)
,但我不确定如何将其添加到下面的命令中。
Get-ChildItem $Path -Filter $Filter -Recurse |
Select FullName |
ft -HideTableHeaders
总结我正在做的事情。
我目前在Windows 7上使用PowerShell v2,但我可以升级到v4。该脚本主要用于Windows 10和Windows Server 2012 R2及更高版本。
修改1 以下是日志文件和正则表达式的示例。
FINER: Entering service: ABC 2017-11-03T08:22:18.557+0100 - INFO: Some info. 2017-11-03T08:22:18.557+0100 - INFO: Some info. 2017-11-03T08:22:18.557+0100 - INFO: Some info. 2017-11-03T08:22:18.557+0100 - INFO: Some info. 2017-11-03T08:22:18.557+0100 - INFO: Some info. 2017-11-03T08:22:18.557+0100 - INFO: Some info. 2017-11-03T08:22:18.557+0100 - INFO: The request has been completed.
(2017-10-.*FINER\: Entering service: (ABC |ABC1|ABC2))[\s\S]*?(INFO: \d\d\d\d\d\d\d\d\d\d\d\d The request has been completed)
答案 0 :(得分:1)
编辑2解决方案
这是最终的代码。我的示例中的正则表达式与示例日志不匹配。
$Files = (Get-ChildItem $Path -Filter $FilterFile -Recurse | Get-Content | Out-String)
(Select-String -inputObject $Files -pattern $Regex -AllMatches).Matches.Count
表达式很好,这不是问题。
谢谢!