gpt4 book ai didi

regex - Powershell多行模式匹配和选择那些行

转载 作者:行者123 更新时间:2023-12-03 01:25:27 27 4
gpt4 key购买 nike

我正在尝试根据多行匹配从日志文件中选择行。我们如何使用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 }
您应该使用 -Raw上的 Get-Content开关将文件内容作为单个字符串传递。否则,它是一个字符串数组。使用单行修饰符 (?s),使 .匹配换行符。由于您只想遍历两条连续的线,因此我选择仅显式地匹配 \r\n而不使用单行修饰符。然后,您可以使用 .*,而不必担心它会与当前行超出匹配。
由于 Select-String返回产生匹配项的整个字符串,因此您将需要返回 MatchInfo对象的属性 Matches及其属性 Value以仅显示匹配的文本。

关于regex - Powershell多行模式匹配和选择那些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63624331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com