繁体   English   中英

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开关将文件内容作为单个字符串传递。 否则它是一个字符串数组。 使用单行修饰符(?s) ,使. 匹配换行符。 由于您只想遍历两条连续的行,因此我会选择仅显式匹配\\r\\n而无需单行修饰符。 然后你可以使用.*而不用担心它会超出当前行。

由于Select-String返回产生匹配的整个字符串,因此您需要返回MatchInfo对象的属性Matches及其属性Value以仅显示匹配的文本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM