3

次の内容のテキスト ファイルがあります。

SEGMENTS="worker01 worker02 worker03 worker04"
WORKER_SEGMENTS="worker01 worker02 worker03 worker04"
#SEGMENTS="worker01"
#WORKER_SEGMENTS="worker01"

このファイルを別の PowerShell スクリプトから読み取り、値の配列を作成したいと考えていWORKER_SEGMENTSます。私はこれまでに得ました:

$workers = Get-Content $strPath"\worker\conf\segments.conf" | Where-Object {$_ -like "*WORKER_SEGMENTS*"}
Write-Host $workers

これにより、次の結果が得られます。

PS Q:\mles\etl-i_test\rc> .\etl.ps1
WORKER_SEGMENTS="worker01 worker02 worker03 worker04" #WORKER_SEGMENTS="worker01"

worker01, worker02, worker03, worker04from WORKER_SEGMENTS(先頭の # なし) だけが配列として必要です。どうすればこれを達成できますか?

4

3 に答える 3

3

これを試すことができます:

Get-Content .\t.txt | 
? { $_ -like "WORKER_SEGMENTS*" } | 
% { $_ -replace '.*?"([^"]*)".*', '$1' -split " " }

worker01
worker02
worker03
worker04

または

Get-Content .\t.txt | 
? { $_ -like "WORKER_SEGMENTS*" } | 
% { ($_ -split '"')[1] -split ' ' }

worker01
worker02
worker03
worker04
于 2013-05-03T15:49:04.610 に答える
2

これを試して:

Get-Content $strPath"\worker\conf\segments.conf" | 
    Select-String 'WORKER_SEGMENTS\s*=\s*"([^"]*)"' | 
    Foreach {$_.Matches.Groups[1].Value -split ' '} | 
    Foreach {$ht=@{}}{$ht.$_=$null}
$ht

ハッシュテーブルを使用すると、重複するエントリをかなり簡単に削除できます。

于 2013-05-03T15:51:08.217 に答える
1

必要なものを正確に得るために少し調整する必要があるかもしれませんが、これは正しい方向に向かうはずです:

$workers = (Get-Content $strPath"\worker\conf\segments.conf" | ?{$_ -like 'Worker_Segments*'}).Split('"')[1].Split(' ')
于 2013-05-03T15:46:43.697 に答える