2017-09-25 58 views
1

我想解析一個.txt文件,以便創建一個.csv,問題在於該文件太大,我沒有在所有txt中的類似字符,所以這是一個簡短的例子:解析匹配後的東西「東西」Powershell

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行。我認爲如果我能匹配一個像「主機名」這樣的單詞,我將能夠選擇下一行。

喜歡的東西:

$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 = 

但我不知道如何選擇主機名之後的行。

回答

2

您可以使用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子屬性包含匹配後的行結果。