regex - 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
但即使这样也失败了。应该是什么语法?我确信它很简单,但似乎无法让我的头脑相同。
解决方案
您可以将结果添加到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
推荐阅读
- css - 在 react 中运行 yarn build 后 CSS 更改
- php - 如何使标签页标题动态化
- next.js - Vercel NextJS 应用程序环境变量不起作用
- c# - 如何对依赖有效 CustomerId 工作的 Stripe 方法进行单元测试
- terminal - NativeScript + Apple M1 错误:“arch install”命令失败
- lua - Lua中的Pandoc过滤器将跨度插入现有字符串
- javascript - Chrome devtool 中的可读调试
- ios - 通过 WKWebView 从 Documents Directory 上传文件
- ios - Flutter IOS Cocoapods '来自 Cocoapods 的错误输出:'
- python - 如何将绘图、选项卡和图像导出到单个 html 中