首页 > 解决方案 > Powershell Select-String 在 1 行中输出为 CSV

问题描述

我试图将输出Select-String放入一行而不是多行,但似乎无法让我的头脑保持一致。

这是我的输入字符串和一个非常简单的模式,用于在之后提取数据'='

'trailer data      [REFNO=0FWEB8,STRTDATE=030119,STRTTIME=075257,STRTINTIME=671442647590,IMPIND=184,CSP_MS_SRTIME_9580=21,CSP_MS
_SRTIME_9210=24229,P4=9777A611236814D8,P7=04,CD=PT,S0=TestB82PTResponseTags,R0=00,R1=0FWEB8,CSP_MS_SRTIME_9560=24,]' | select-string -Pattern '=[A-Za-z0-9]+' -AllMatches | % { $_.Matches } | % { $_.Value.SubString(1) }

但不是为搜索的每个模式在单独的行中显示输出,

0FWEB8

030119

075257

671442647590

184

21

24229

9777A611236814D8

04

PT

TestB82PTResponseTags

00

0FWEB8

24

我正在尝试将输出显示为 CSV,这意味着在一行本身中是这样的,

0FWEB8, 030119, 075257, 671442647590, 184, 21, 24229, 9777A611236814D8, 04, PT, TestB82PTResponseTags, 00, 0FWEB8, 24

尝试使用管道,Export-CSV但即使这样也失败了。应该是什么语法?我确信它很简单,但似乎无法让我的头脑相同。

标签: regexpowershellselect-stringexport-csv

解决方案


您可以将结果添加到ArrayList然后使用-join运算符来获得所需的输出

$values = New-Object System.Collections.ArrayList; 'trailer data      [REFNO=0FWEB8,STRTDATE=030119,STRTTIME=075257,STRTINTIME=671442647590,IMPIND=184,CSP_MS_SRTIME_9580=21,CSP_MS_SRTIME_9210=24229,P4=9777A611236814D8,P7=04,CD=PT,S0=TestB82PTResponseTags,R0=00,R1=0FWEB8,CSP_MS_SRTIME_9560=24,]' | select-string -Pattern '=[A-Za-z0-9]+' -AllMatches | % { $_.Matches } | % { $values.Add($_.Value.SubString(1)) > $null }; $values -join ","

输出:

0FWEB8,030119,075257,671442647590,184,21,24229,9777A611236814D8,04,PT,TestB82PTResponseTags,00,0FWEB8,24

推荐阅读