name: ENC1
IPv4 Address: 172.16.2.101
link Settings: Forced,100 Mbit,Full Duplex
name: ENC2
IPv4 Address: 172.16.2.103
link Settings: Forced,Full Duplex
name: ENC3
IPv4 Address: 172.16.2.103
link Settings: Forced,100 Mbps,Full Duplex
name: ENC4
IPv4 Address: 172.16.2.104
link Settings: Forced,Full Duplex
这就是我提出的.
$out = @()
$text = Get-Content input.txt
$count = 0
do {
$line = ($text | select -Skip $count -first 3)
$obj = “” | Select name,IP,Settings
$obj.name = $line[0].split(“:”)[1]
$obj.IP = $line[1].split(“:”)[1]
$obj.Settings = $line[2].split(“:”)[1]
$out += $obj
$count = $count+3
}
until ($count -eq $text.count)
$out
这样做有简单的方法吗?
解决方法 使用开关:$data = (@'name: ENC1 IPv4 Address: 172.16.2.101 link Settings: Forced,Full Duplex name: ENC2 IPv4 Address: 172.16.2.103 link Settings: Forced,Full Duplex name: ENC3 IPv4 Address: 172.16.2.103 link Settings: Forced,Full Duplex name: ENC4 IPv4 Address: 172.16.2.104 link Settings: Forced,Full Duplex'@).split("`n") |foreach {$_.trim()}Switch -Regex ($data) { '^name: (.+)' {$obj = [PSCustomObject]@{name=$Matches[1];IP=$null;Settings=$null}} '^IPv4 Address: (.+)' {$obj.IP = $matches[1]} '^link Settings: (.+)' {$obj.Settings = $Matches[1];$obj}}name IP Settings ---- -- -------- ENC1 172.16.2.101 Forced,Full Duplex ENC2 172.16.2.103 Forced,Full Duplex ENC3 172.16.2.103 Forced,Full Duplex ENC4 172.16.2.104 Forced,Full Duplex
编辑:经过一番考虑后,我觉得我更喜欢这种模式:
$DefValue = 'Parse error. Check input.'Switch -Regex ($data) { '^name: (.+)' {$obj;$obj = [PSCustomObject]@{name=$Matches[1];IP=$DefValue;Settings=$DefValue}} '^IPv4 Address: (.+)' {$obj.IP = $matches[1]} '^link Settings: (.+)' {$obj.Settings = $Matches[1]}}总结
以上是内存溢出为你收集整理的Powershell – 将文本字段转换为对象全部内容,希望文章能够帮你解决Powershell – 将文本字段转换为对象所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)