我的文本输出类似于:
svwxchmig101.vmx:111:sched.mem.min = "0"
svwxchmig101.vmx:112:sched.mem.minSize = "0"
TEAMWIKI.vmx:114:sched.mem.min = "0"
TEAMWIKI.vmx:115:sched.mem.minSize = "0"
XenTemplateWin2008.vmx:93:sched.mem.min = "0"
XenTemplateWin2008.vmx:94:sched.mem.minSize = "0"
Zenith_TalismaWIN2K12R2STD_10-13-15.vmx:103:sched.mem.min = "0"
Zenith_TalismaWIN2K12R2STD_10-13-15.vmx:104:sched.mem.minSize = "0"`
我需要在powershell中使用正则表达式,它会在每行上迭代时捕获三个组:
第一组捕获第一个冒号(不包括冒号)的所有内容。
第二组捕获'sched.mem.min'或'sched.mem.minSize'。
第三组捕获引号之间的数字值。虽然上面的示例代码将所有这些代码都显示为零,但它也可以是非零值(4096,32768等)。
在这里看了几个小时后,我根本无法弄清楚如何制作一个能完成所有三次捕获的正则表达式。
答案 0 :(得分:0)
答案 1 :(得分:0)
在提供有关提供完整信息的上述评论之后,我会注意到您不需要正则表达式来解决问题。假设该文件名为“Data.txt”......
$Data = Get-Content Data.txt
ForEach ($Line in $Data) {
$Groups = $Line -split ":"
$Group1 = $Groups[0]
$Group2and3 = $Groups[-1]
$Grps = $Group2and3 -split "="
$Group2 = $Grps[0].Trim()
$Group3 = $Grps[1].Trim()
# Do something with $Group1 and $Group2 and $Group3 here
}
答案 2 :(得分:0)
我会使用此正则表达式 ([^:]+).*?(sched\.mem.min(?:Size)?).*?
:
Get-Content "yourLog.txt" | ForEach-Object {
$result = [regex]::Match($_, '([^:]+).*?(sched\.mem.min(?:Size)?).*?"([^"]+)"')
#$result.Groups[1].Value
#$result.Groups[2].Value
#$result.Groups[3].Value
}
答案 3 :(得分:0)
我喜欢正则表达式和所有内容,但“我选择了一种我无法使用的工具”并不是一个好问题。您不需要正则表达式来分割PowerShell中的字符串:
$test = @'
svwxchmig101.vmx:111:sched.mem.min = "0"
svwxchmig101.vmx:112:sched.mem.minSize = "0"
TEAMWIKI.vmx:114:sched.mem.min = "0"
TEAMWIKI.vmx:115:sched.mem.minSize = "0"
XenTemplateWin2008.vmx:93:sched.mem.min = "0"
XenTemplateWin2008.vmx:94:sched.mem.minSize = "0"
Zenith_TalismaWIN2K12R2STD_10-13-15.vmx:103:sched.mem.min = "0"
Zenith_TalismaWIN2K12R2STD_10-13-15.vmx:104:sched.mem.minSize = "0"
'@ -split "`r?`n" # setup, you would use Get-Content
$test | ForEach-Object {
$Name, $Mem, [int]$Num = $_.split(':= "')[0,2,6]
$Name, $Mem, $Num
}
示例输出:
XenTemplateWin2008.vmx
sched.mem.minSize
0
Zenith_TalismaWIN2K12R2STD_10-13-15.vmx
sched.mem.min
0
答案 4 :(得分:0)
我在思考这个问题。这是一个适用于我想做的正则表达式:
(\S*\.vmx)|(sched.\w*.\w*.\w)|"(.+)