简洁地解析管道

时间:2010-07-01 09:04:03

标签: powershell powershell-v2.0

我有很多文本输出来自我想在Powershell 2.0中解析的工具。输出格式很好,所以我可以构造一个正则表达式来使用select-string提取我想要的数据。然而,从select-string中获取后续匹配似乎是冗长的。必须有一个更短的方式?

这有效:

p4 users | select-string "^\w+(.\w+)?" | 
    select -Expand Matches | %{p4 changes -u $_.Value}

但所有这些匹配和价值观都很冗长。 select-string帮助文件中没有任何明显的东西,但有没有办法让它只将正则表达式匹配作为字符串输出?有点像:

p4 users | select-string "^\w(.\w+)?" -ImaginaryMagicOption | %{p4 changes -u $_}

1 个答案:

答案 0 :(得分:2)

在这种情况下,使用-match例如:

可能会更容易一些
p4 users | Foreach {if ($_ -match '^\w+(.\w+)?') { p4 changes -u $matches[0] }}

这只是因为Select-String的输出是MatchInfo对象,它将Matches信息隐藏了一级。 OTOH它可以工作:

p4 users | Select-String "^\w+(.\w+)?" | 
    Foreach {p4 changes -u $_.Matches[0].Value}