我有一个正则表达式查询在regexr中工作,但在PowerShell中对我不起作用。我在做什么错了?
正则表达式
(Host.*[\r\n]+([^\r\n]*)+[\r\n]+([^\r\n]*))
数据
HostName: ComputerName Date: 2018-12-21 Time: 09:16:02 Step: 01 Date: 2018-12-21 Time: 09:29:18 Step: 02 Date: 2018-12-21 Time: 09:47:38 Step: 03 Date: 2018-12-21 Time: 10:08:43 Step: 04 Date: 2018-12-21 Time: 10:27:00 Step: 05 Date: 2018-12-21 Time: 10:45:14 Step: 06 Date: 2018-12-26 Time: 10:02:39
在匹配时,它将捕获其余的行以及接下来的两行。由于所有内容都是日志中每个条目3个一组。
我将工作代码粘贴到powershell中,并尝试了三种方式。
$data | select-string -match "(Host.*[\r\n]+([^\r\n]*)+[\r\n]+([^\r\n]*))"
$data -matches "(Host.*[\r\n]+([^\r\n]*)+[\r\n]+([^\r\n]*))"
我已经进行了研究,最接近的结果是Windows无法与\r\n
配合使用。
我还没有找到解决方法。
我在做什么错或者需要用什么来代替\r\n
?
答案 0 :(得分:1)
您的数据不是您所期望的。 Get-Content
将文件读取到行的数组中,并从每行的末尾删除换行符。 Select-String
和-match
都针对正则表达式分别检查每行,但找不到匹配项,因为每行仅包含您要匹配的内容的一小部分。
要解决此问题,您需要将文件的全部内容作为单个字符串。
$data = Get-Content 'C:\path\to\input.txt' | Out-String
在PowerShell v3或更高版本上,您也可以使用
$data = Get-Content 'C:\path\to\input.txt' -Raw