我正在尝试读取文件中的行并搜索跨越两行的模式。在notepad ++中查看文件,我在文件中看到了一个LF char。
示例log.txt:
I want to find this value here: OK
我的简单代码不起作用,不返回任何内容:
data class Foo(val isBar1:Boolean= false,val isBar2:Boolean= false)
我在这里尝试了很多组合,包括select-string -Path "log.txt" -Pattern "find this\n*value here: OK"
和.+
,我发现它们发布在各种线程上。我可以使用以下方式获得第一行:
\r
上述结果为:select-string -Path "log.txt" -Pattern "find this\n*"
在上面的行中添加更多内容会导致无法返回任何内容。任何想法如何使用select-string?由于我正在使用的文件的大小可能,我试图避免使用获取内容。
答案 0 :(得分:4)
所以我想我理解你的问题。如果您的文件包含要关键的行,则下一行是您要查看的行:
(Select-String -Path "Log.txt" -Pattern "find this" -Context 1).Context.PostContext
我不确定回车是否是您格式化的工件。如果不是那么这会更好:
(Select-String -Path "Log.txt" -Pattern "find this" -Context 2).Context.PostContext[1]
如果你不知道两位之间有多少行,这是一种方法:
$file = Get-Content 'Log.txt' -Raw
$file -match '(?smi)I want to find this.*(value here: OK)'
$matches[1]
答案 1 :(得分:0)
由于您可能需要多行正则表达式解决方案,因此需要将文本文件作为一个字符串读取。
使用测试文件:
Stfuf
Bagel
I want to find this
value here: OK
Things
我能够使用满足您的示例文本的简单匹配模式来获得结果。
(Get-Content -Raw c:\temp\test.txt | Select-String -Pattern "([\w ]+)\s*value here: OK").Matches.Groups[1].Value
基本上获取不变空格之前的文本,包括换行符和静态文本"值:OK"。可以通过积极向前看做得更好,但这似乎工作正常。