如何只搜索整个单词而不应该存在?
How can search whole word only and should not exist?
dir C:\dev\ve1 -Include *.scala -Recurse |
Select-String -Pattern "ValidSite" -SimpleMatch -CaseSensitive
这工作正常,但我想要只有 整个单词的行 但它给出 ValidSiteId
.
并且 行应该包含 'ValidSite' 而不应包含 'case' 字.
我遍历了 Select-String
的所有选项,并尝试了多种方法,但没有成功。
你应该看看正则表达式:
dir C:\dev\ve1 -Include *.scala -Recurse | Select-String '^(?!.*case).*ValidSite .*$'
^. ... *ValidSite .*$
应该说的很清楚了。第一部分 (?!.*case)
是一个否定的前瞻:在匹配字符串之前,它检查字符串不包含 "case"(前面有任意数量的字符)。
匹配单词边界 (\b
) 并将结果通过另一个 Select-String
与您的否定条件相匹配:
Get-ChildItem C:\dev\ve1 -Include *.scala -Recurse |
Select-String -Pattern "\bValidSite\b" -CaseSensitive |
Select-String -Pattern "\bCase\b" -NotMatch -CaseSensitive
dir C:\dev\ve1 -Include *.scala -Recurse |
Select-String -Pattern "ValidSite" -SimpleMatch -CaseSensitive
这工作正常,但我想要只有 整个单词的行 但它给出 ValidSiteId
.
并且 行应该包含 'ValidSite' 而不应包含 'case' 字.
我遍历了 Select-String
的所有选项,并尝试了多种方法,但没有成功。
你应该看看正则表达式:
dir C:\dev\ve1 -Include *.scala -Recurse | Select-String '^(?!.*case).*ValidSite .*$'
^. ... *ValidSite .*$
应该说的很清楚了。第一部分 (?!.*case)
是一个否定的前瞻:在匹配字符串之前,它检查字符串不包含 "case"(前面有任意数量的字符)。
匹配单词边界 (\b
) 并将结果通过另一个 Select-String
与您的否定条件相匹配:
Get-ChildItem C:\dev\ve1 -Include *.scala -Recurse |
Select-String -Pattern "\bValidSite\b" -CaseSensitive |
Select-String -Pattern "\bCase\b" -NotMatch -CaseSensitive