首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell select-string根据匹配的数量返回不同的值。

Powershell select-string根据匹配的数量返回不同的值。
EN

Stack Overflow用户
提问于 2013-09-04 20:43:35
回答 2查看 2.4K关注 0票数 4

我有一个生成并包含各种文件引用的报表文件。我使用String和正则表达式来匹配某些类型的文件,并对它们执行后续处理。

当有0 (0)、1 (1)或多个(2+)匹配时,我面临的困境是试图一致地识别匹配的数量。以下是我尝试过的:

代码语言:javascript
复制
(select-string -path $outputfilePath -pattern $regex -allmatches).matches.count

如果有0匹配,则返回"null“,如果有一个匹配,则返回"1”,如果多个匹配,则返回"null“。

代码语言:javascript
复制
(select-string -path $outputfilePath -pattern $regex -allmatches).count

如果有0或1匹配,则返回"null“,如果有多个匹配,则返回匹配数。

我是Powershell的新手,但我正试图找到一种一致的方法来测试匹配的数量,而不管是否有0、1或多个匹配。

EN

回答 2

Stack Overflow用户

发布于 2013-09-04 20:50:12

试试这个:

代码语言:javascript
复制
$content = Get-Content $outputfilePath
($content -match $regex).Count

Powershell有许多Comparison Operators,可能会使您的生活更轻松。下面是一个简短的列表:

代码语言:javascript
复制
-eq
-ne
-gt
-ge   
-lt
-le
-Like
-NotLike
-Match
-NotMatch
-Contains
-NotContains
-In
-NotIn
-Replace

在本例中,-Match将将$content字符串与正则表达式$regex匹配,并将输出按括号分组。此分组是字符串的集合。然后,我们可以对对象进行计数,并打印出匹配的精确计数。

那么为什么您的代码不能像预期的那样工作呢?当您有一个匹配时,.Matches实际上返回一个类似于字符串“test123”的System.Text.RegularExpressions.Match对象:

代码语言:javascript
复制
Groups   : {test123}
Success  : True
Captures : {test123}
Index    : 15
Length   : 7
Value    : test123

这一切为什么要发生?因为Microsoft.PowerShell.Commands.MatchInfo对象是Select-String返回的对象。您可以通过在单匹配输出上尝试其他一些属性(如.Filename )来验证这一点。

好吧,但为什么我们不能一次把所有的火柴都拿出来?这是因为多个匹配将返回多个对象,所以现在您有了一个正在尝试操作的集合。集合有不同的类型,并且不理解.Matches。没有在1匹配上返回集合,而是只返回一个理解.Matches的对象!

长话短说:这些不是你想要的结果!

票数 6
EN

Stack Overflow用户

发布于 2013-09-06 23:53:06

可以使用@(...)将结果始终放置在带有Count的集合中。

代码语言:javascript
复制
(Select-String ...)        # may return $null, one match, or a collection of matches
(Select-String ...).Count  # only succeeds for two or more matches

@(Select-String ...)       # always returns a collection of matches
@(Select-String ...).Count # always succeeds
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18623419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档