【发布时间】:2017-11-06 22:52:52
【问题描述】:
我正在尝试使用正则表达式搜索多个文本文件。当正则表达式在单行上匹配时,我设法让它工作,但是当我使用在一行和另一行末尾匹配的正则表达式进行测试时,它不起作用。
我了解到您首先需要将整个文件读入一个变量/数组,然后进行正则表达式搜索。我没有设法让它工作。
文件夹和文件的结构是
根文件夹 ├─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:进入服务:ABC 2017-11-03T08:22:18.557+0100 - 信息:一些信息。 2017-11-03T08:22:18.557+0100 - 信息:一些信息。 2017-11-03T08:22:18.557+0100 - 信息:一些信息。 2017-11-03T08:22:18.557+0100 - 信息:一些信息。 2017-11-03T08:22:18.557+0100 - 信息:一些信息。 2017-11-03T08:22:18.557+0100 - 信息:一些信息。 2017-11-03T08:22:18.557+0100 - 信息:请求已完成。(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)
【问题讨论】:
-
将文件存储在一个变量中。为什么要尝试获取 oneliner 命令?
-
@guiwhats 我不需要在单行机中进行操作。我已经通过拆分命令用更多行测试了它,但没有任何运气。
-
首先使用 [iO.File]::ReadAllLines() 读取日志,然后遍历所有行并进行正则表达式搜索
-
@guiwhatsthat 好的。如何获取文件名并在该命令中使用它们?当我使用 Get-ChildItem $Path -Filter $Filter -Recurse |选择全名 | ft -HideTableHeaders 我得到了文件的完整路径。但是当我使用它时,powershell 似乎将其视为一条大路径而不是单独的路径。
-
将文件读入单个字符串 (
Get-Content | Out-String),然后使用Select-String将内容与正则表达式进行匹配。话虽如此,您的正则表达式与您的示例数据不匹配。完全没有。