比赛后解析线"东西"电源外壳

时间:2017-09-25 14:21:17

标签: powershell parsing

我试图解析.txt文件以创建.csv,问题是文件太大而且我在所有txt中都没有类似的字符,所以这是一个简短的例子:

Hostname:
xxx7
Network:
IPv4 Address            = xxxx
IPv4 Netmask            = xxxx
IPv4 Gateway            = xxxx
DNS Servers             = xxxx
Hostname:
xxxx-184
Network:
IPv4 Address            = xxxx
IPv4 Netmask            = xxxx
IPv4 Gateway            = xxxx
DNS Servers             = xxxx
Hostname:
xxxx-184
Network:
IPv4 Address            = xxxx
IPv4 Netmask            = xxxx
IPv4 Gateway            = xxxx
DNS Servers             = xxxx
Hostname:
xxxx-184

这个txt文件有500行。我想如果我能匹配一个词,比如" hostname"我可以选择下一行。

类似的东西:

$input = Get-Content C:\xxx\VNX\Audit_script\output\IP_info_all.txt
$array = @()
$input | foreach-object {
$writeobj = $true
$obj = New-Object System.Object
If ($_ -match 'Hostname*') {
        $Hostname = 

但我不知道如何在主机名后选择该行。

1 个答案:

答案 0 :(得分:3)

您可以使用Select-String-Context参数执行此操作:

Get-Content .\IP_info_all.txt | Select-String 'Hostname' -Context 0,1 | ForEach-Object {
    $Hostname = $_.Context.PostContext

    #Do something with this.. for now we'll just print out hostname
    $Hostname
}

-Context参数可用于选择匹配行之前/之后的行数。如果您提供单个数字输入,则会获得前后的行数。通过指定两个数字,您可以指定之前的行数和之后的行数(因此在上面的0和之前的1中的示例中)。

结果返回到名为.Context的属性,该属性具有.PostContext子属性,其中包含匹配后行/的结果。