使用PowerShell从文本文件中创建数组

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"

我只需要从WORKER_SEGMENTS数组中获取worker01worker02worker03worker04(不包括前导#),并将它们作为一个数组。我该如何实现这个目标?
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

这似乎是我能理解的最佳答案。% { ($_ -split '"')[1] -split ' ' } 这段代码是做什么用的? - mles
1
它获取第一个和第二个 " 之间的内容(即工作人员名称),然后通过在空格上分割将名称转换为数组。第一个示例使用正则表达式执行相同操作。 - Frode F.

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

通过使用哈希表,我们可以相当容易地消除重复的条目。

1

你可能需要稍微调整一下才能得到你想要的结果,但这应该可以让你朝着正确的方向前进:

$workers = (Get-Content $strPath"\worker\conf\segments.conf" | ?{$_ -like 'Worker_Segments*'}).Split('"')[1].Split(' ')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接