首先,对不起我的英语不好
对于Powershell,我是一个全新的人,对编程不是那么熟悉,但是我愿意学习
所以我的问题是:
我得到了一个.conf数据,其内容如下:
[XYZ1 - XYZXYZ, XYZXYZ]
room a201*,f110
XYZXYZXYZ
XYZXYZXYZ
XYZXYZXYZ
XYZXYZXYZ
[XYZ2 - XYZXYZ, XYZXYZ]
room a202*,f110
XYZXYZXYZ
XYZXYZXYZ
XYZXYZXYZ
我的目标是将文本导出到csv或类似的其他数据中:
a201,[XYZ1 - XYZXYZ, XYZXYZ]
f110,[XYZ1 - XYZXYZ, XYZXYZ]
a202,[XYZ1 - XYZXYZ, XYZXYZ]
f110,[XYZ1 - XYZXYZ, XYZXYZ]
因此,对于带有[]括号的每个文本,都应占据房间(在下面的行)并检查是否还有另一个房间(a201,f110),删除单词“ room”,并删除下面的其他行和星号“ *”并像上面一样导出。
我的第一步是这样的:
Select String -input C:\xyz\text.conf -pattern "\[*\]","room *" | select line
然后我尝试用Substring删除“ room”一词,但这没有用,而且我不知道如何为每个房间创建一个循环并将其导出为2列。
我希望你们能帮助我。
问候马塞尔(Marcel)
答案 0 :(得分:1)
以下可能是一种解决方案。这将使用Context
的{{1}}属性保留前一行,然后您可以在其中拆分和替换搜索到的行以获得所需的输出。
Select-String
测试脚本
Select-String -input C:\xyz\text.conf -pattern 'room' -Context 1,0 | % {
$current = $_
$current.Line -split ',' | % {
"$($_ -replace 'room ' -replace '\*'),$($current.Context.PreContext)"
}
}
输出
("[XYZ1 - XYZXYZ, XYZXYZ]",
"room a201*,f110",
"XYZXYZXYZ",
"XYZXYZXYZ",
"XYZXYZXYZ",
"XYZXYZXYZ",
"",
"[XYZ2 - XYZXYZ, XYZXYZ]",
"room a202*,f110",
"XYZXYZXYZ",
"XYZXYZXYZ",
"XYZXYZXYZ") |
sls 'room' -Context 1,0 | % {
$current = $_
$current.Line -split ',' | % {"$($_ -replace 'room ' -replace '\*'),$($current.Context.PreContext)"}
}