Как можно выполнить поиск только по целому слову, которое не должно существовать?

#powershell #powershell-2.0 #powershell-3.0

#powershell #powershell-2.0 #powershell-3.0

Вопрос:

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

Это работает нормально, но я хочу строки, в которых есть только целое слово, но оно выдает ValidSiteId .

И строка должна содержать ‘ValidSite’ и не должна содержать слово ‘case’.

Я перебрал все варианты Select-String и перепробовал несколько способов, но безуспешно.

Ответ №1:

Сопоставьте границы слов ( b ) и передайте результат через другое Select-String с вашим отрицательным условием:

 Get-ChildItem C:devve1 -Include *.scala -Recurse |
  Select-String -Pattern "bValidSiteb" -CaseSensitive |
  Select-String -Pattern "bCaseb" -NotMatch -CaseSensitive
  

Ответ №2:

Вам следует взглянуть на регулярное выражение :

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

^. ... *ValidSite .*$ должно быть достаточно понятным. Первая часть (?!.*case) представляет собой отрицательный прогноз: перед сопоставлением строки проверяется, что строка не содержит «регистр» (с любым количеством символов перед ним).