【发布时间】:2019-06-14 19:05:08
【问题描述】:
我正在尝试搜索包含跨越多行的日志条目的日志文件。示例:
BEGIN
...
123456
...
END
BEGIN
...
456789
...
END
我想搜索一个特定的数字 (123456),但打印从前面的 BEGIN 标记到 END 标记的所有内容。如何在 PowerShell 中完成此操作?
我尝试了几个正则表达式,但都没有成功。我到目前为止的代码是:
$id = '123456'
$pattern = 'BEGIN(.|\s)*?'+$id+'(.|\s)*?END'
$matches = Select-String -Path "C:\temp\logile.log" -Pattern $pattern
不知道为什么这不起作用。有没有其他方法可以让它工作?
【问题讨论】:
-
我认为你需要修饰符,因为它跨行匹配。
$pattern = '(?m)BEGIN(.|\s)*?'+$id+'(.|\s)*?END' -
也可以这样做
(?sm)BEGIN.*?123456.*?END -
根据您对数据的处理方式,您可以在开始时拆分文件并以这种方式分析“块”。只有当你做的比你在这里展示的更多。
标签: powershell