如何只搜索整个单词而不应该存在?

时间:2016-10-24 14:16:44

标签: powershell powershell-v2.0 powershell-v3.0

dir C:\dev\ve1 -Include *.scala -Recurse |
  Select-String -Pattern "ValidSite" -SimpleMatch -CaseSensitive

这个工作正常,但我想要只有整个单词的行,但是它会给ValidSiteId

行应包含'ValidSite',不应包含'case'字

我经历了Select-String的所有选项,我尝试了多种方法,但没有运气。

2 个答案:

答案 0 :(得分:1)

你应该看一下正则表达式:

dir C:\dev\ve1 -Include *.scala -Recurse | Select-String '^(?!.*case).*ValidSite .*$'

^. ... *ValidSite .*$应该足够明确。第一部分(?!.*case)是否定前瞻:在匹配字符串之前,它检查字符串不包含" case" (前面有任意数量的字符)。

答案 1 :(得分:1)

匹配字边界(\b)并将结果通过另一个Select-String与您的负面条件相关联:

Get-ChildItem C:\dev\ve1 -Include *.scala -Recurse |
  Select-String -Pattern "\bValidSite\b" -CaseSensitive |
  Select-String -Pattern "\bCase\b" -NotMatch -CaseSensitive