Powershell 多行模式匹配和选择那些行
Powershell multiline pattern matching and picking those lines
我正在尝试根据多行匹配从日志文件中挑选行。我们如何使用 Powershell 实现这一目标?
日志文件:
Date: 2020-05-06 2:30:33 PM
Name: ABC.txt
{text}
{text}
{text}
Date: 2020-04-08 3:30:33 PM
Name: PQR.txt
{text}
我尝试匹配的模式是:
Date:
Name:
我想用这个模式拉所有的线。我尝试了以下行,但它不起作用。
get-content $log_file | select-string -pattern "(?ms)Date:.*\nName:.*" -AllMatches
我正在寻找的输出是:
Date: 2020-05-06 2:30:33 PM
Name: ABC.txt
Date: 2020-04-08 3:30:33 PM
Name: PQR.txt
在此之后我想创建一个数组或表格格式数据(首选)作为:
Date|Name
2020-05-06 2:30:33 PM|ABC.txt
2020-04-08 3:30:33 PM|PQR.txt
感谢大家的支持!!!
您可以执行以下操作:
Get-Content $log_file -Raw |
Select-String -Pattern '(?m)^Date:.*\r?\n\s*Name:.*' -AllMatches |
Foreach-Object { $_.Matches.Value }
您应该在 Get-Content
上使用 -Raw
开关将文件内容作为单个字符串传递。否则它是一个字符串数组。使用 single-line 修饰符 (?s)
,使 .
匹配换行符。由于您只想遍历两条连续的线,我会选择只显式匹配 \r
和 \n
,而不使用 single-line 修饰符。然后你可以使用 .*
而不用担心它匹配超出当前行。
由于 Select-String
return 是产生匹配的整个字符串,您将需要 return MatchInfo
对象的 属性 Matches
及其 属性 Value
以仅显示匹配的文本。
我正在尝试根据多行匹配从日志文件中挑选行。我们如何使用 Powershell 实现这一目标?
日志文件:
Date: 2020-05-06 2:30:33 PM
Name: ABC.txt
{text}
{text}
{text}
Date: 2020-04-08 3:30:33 PM
Name: PQR.txt
{text}
我尝试匹配的模式是:
Date:
Name:
我想用这个模式拉所有的线。我尝试了以下行,但它不起作用。
get-content $log_file | select-string -pattern "(?ms)Date:.*\nName:.*" -AllMatches
我正在寻找的输出是:
Date: 2020-05-06 2:30:33 PM
Name: ABC.txt
Date: 2020-04-08 3:30:33 PM
Name: PQR.txt
在此之后我想创建一个数组或表格格式数据(首选)作为:
Date|Name
2020-05-06 2:30:33 PM|ABC.txt
2020-04-08 3:30:33 PM|PQR.txt
感谢大家的支持!!!
您可以执行以下操作:
Get-Content $log_file -Raw |
Select-String -Pattern '(?m)^Date:.*\r?\n\s*Name:.*' -AllMatches |
Foreach-Object { $_.Matches.Value }
您应该在 Get-Content
上使用 -Raw
开关将文件内容作为单个字符串传递。否则它是一个字符串数组。使用 single-line 修饰符 (?s)
,使 .
匹配换行符。由于您只想遍历两条连续的线,我会选择只显式匹配 \r
和 \n
,而不使用 single-line 修饰符。然后你可以使用 .*
而不用担心它匹配超出当前行。
由于 Select-String
return 是产生匹配的整个字符串,您将需要 return MatchInfo
对象的 属性 Matches
及其 属性 Value
以仅显示匹配的文本。