【问题标题】:Loop through several text files with a multiple line regex in PowerShell在 PowerShell 中使用多行正则表达式遍历多个文本文件
【发布时间】: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 将内容与正则表达式进行匹配。话虽如此,您的正则表达式与您的示例数据不匹配。完全没有。

标签: powershell powershell-4.0


【解决方案1】:

编辑 2 解决方案

这是最终代码。正则表达式在我的示例中与示例日志不匹配。

$Files = (Get-ChildItem $Path -Filter $FilterFile -Recurse | Get-Content | Out-String)

(Select-String -inputObject $Files -pattern $Regex -AllMatches).Matches.Count

表达式工作得很好,这不是问题。

谢谢!

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2021-12-07
    • 1970-01-01
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    相关资源
    最近更新 更多