首先,我为我糟糕的英语感到抱歉
我对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(,删除单词"房间"和下面的其他行以及星号"*",并像上面一样导出它。
我的第一步是这样的:
Select String -input C:xyztext.conf -pattern "[*]","room *" | select line
然后我试图用Substring删除单词"room",但没有成功,我不知道如何为每个房间制作一个循环并将其导出到2列中。
我希望你们能帮助我。
问候Marcel
以下可能是一个解决方案。这使用Select-String
的Context
属性来保留前一行,然后可以在其中拆分和替换搜索到的行以获得所需的输出。
Select-String -input C:xyztext.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)"}
}
输出
a201,[XYZ1 - XYZXYZ, XYZXYZ]
f110,[XYZ1 - XYZXYZ, XYZXYZ]
a202,[XYZ2 - XYZXYZ, XYZXYZ]
f110,[XYZ2 - XYZXYZ, XYZXYZ]