在 powershell 中将文本行解析为两个变量
parse lines of text into two variables in powershell
我有一个格式如下的测试文件:
<IPADDRESS1> # <STRINGA>
<IPADDRESS2> # <STRINGB>
<IPADDRESS3> # <STRINGA;STRINGB>
有时会有多个字符串用“;”隔开
我想在 PowerShell 中做的是将其解析为每个 IP/字符串组合的数组并输出到 CSV
期望的输出:
IPAddress1,STRINGA
IPAddress2,STRINGB
IPAddress3,STRINGA
IPAddress3,STRINGB
我目前在使用 PowerShell 时遇到的这个问题是,当我将其通过管道拆分时,我无法让 ForEach 将 IP 地址部分传递到带有辅助字符串的新行中:
get-content C:\file.txt | %{$_ -replace " # ",""} | %{$_ -split ";"}
本例中的输出:
IPAddress1,STRINGA
IPAddress2,STRINGB
IPAddress3,STRINGA
STRINGB
请注意,最后一行缺少 IP 地址。
我的想法是,我需要将每一行文本读入某种解析函数以处理地址和字符串并构建一个数组,以便将该数组输出到 csv。
任何帮助都会很棒,如果有更简单的方法,请告诉我。我仅限于 Powershell。
这是你想要做的吗?
Get-Content C:\file.txt | % {
if($_ -match '<(.*?)>\s+#\s+<(.*?)>') {
$Matches[2] -split ';' | % { "$($Matches[1]),$_" }
} else { Write-Host "Line '$_' doesn't match regex" }
}
IPADDRESS1,STRINGA
IPADDRESS2,STRINGB
IPADDRESS3,STRINGA
IPADDRESS3,STRINGB
使用您的测试数据(无法真正判断那些 <> 是否应该是数据的一部分):
$text =
'IPADDRESS1 # STRINGA',
'IPADDRESS2 # STRINGB',
'IPADDRESS3 # STRINGA;STRINGB'
$text | foreach {
$Address,$Strings = $_.split('#').trim()
Foreach ($String in $Strings.split(';'))
{"$Address,$String" }
}
IPADDRESS1,STRINGA
IPADDRESS2,STRINGB
IPADDRESS3,STRINGA
IPADDRESS3,STRINGB
我有一个格式如下的测试文件:
<IPADDRESS1> # <STRINGA>
<IPADDRESS2> # <STRINGB>
<IPADDRESS3> # <STRINGA;STRINGB>
有时会有多个字符串用“;”隔开
我想在 PowerShell 中做的是将其解析为每个 IP/字符串组合的数组并输出到 CSV
期望的输出:
IPAddress1,STRINGA
IPAddress2,STRINGB
IPAddress3,STRINGA
IPAddress3,STRINGB
我目前在使用 PowerShell 时遇到的这个问题是,当我将其通过管道拆分时,我无法让 ForEach 将 IP 地址部分传递到带有辅助字符串的新行中:
get-content C:\file.txt | %{$_ -replace " # ",""} | %{$_ -split ";"}
本例中的输出:
IPAddress1,STRINGA
IPAddress2,STRINGB
IPAddress3,STRINGA
STRINGB
请注意,最后一行缺少 IP 地址。
我的想法是,我需要将每一行文本读入某种解析函数以处理地址和字符串并构建一个数组,以便将该数组输出到 csv。
任何帮助都会很棒,如果有更简单的方法,请告诉我。我仅限于 Powershell。
这是你想要做的吗?
Get-Content C:\file.txt | % {
if($_ -match '<(.*?)>\s+#\s+<(.*?)>') {
$Matches[2] -split ';' | % { "$($Matches[1]),$_" }
} else { Write-Host "Line '$_' doesn't match regex" }
}
IPADDRESS1,STRINGA
IPADDRESS2,STRINGB
IPADDRESS3,STRINGA
IPADDRESS3,STRINGB
使用您的测试数据(无法真正判断那些 <> 是否应该是数据的一部分):
$text =
'IPADDRESS1 # STRINGA',
'IPADDRESS2 # STRINGB',
'IPADDRESS3 # STRINGA;STRINGB'
$text | foreach {
$Address,$Strings = $_.split('#').trim()
Foreach ($String in $Strings.split(';'))
{"$Address,$String" }
}
IPADDRESS1,STRINGA
IPADDRESS2,STRINGB
IPADDRESS3,STRINGA
IPADDRESS3,STRINGB