Игнорировать символ при использовании Select-String - PullRequest
0 голосов
/ 05 сентября 2018

Я ищу строку определенных символов в текстовом файле; Я использую

Select-String -Path clm-server-test.txt -Pattern "#(S****)"

Я хочу получить только те символы, которые соответствуют шаблону, но он также возвращает символы до и после этой строки.

Например:

У меня есть набор регистрации, начинающийся с

S32145 thomas
S12345 bedro
S09867 stephane

с помощью команды Select-String Я хочу, чтобы она показала мне все S *** слова, а не имена.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

спасибо за ваш ответ и за ваш фактически ваш приказ приблизить меня к ожидаемому результату, за исключением того, что я хотел бы, чтобы он вернул мне то слово, которое начинается с "S ***" до сих пор указывать на линию во всех вещах, которых я хотел бы избежать.

Я бы хотел, чтобы он увидел мне номер "S7676583"

Большое спасибо

0 голосов
/ 05 сентября 2018
  • Select-String -Pattern по умолчанию ожидает регулярное выражение (регулярное выражение) для поиска.

    • "#(S****)" - это недопустимое регулярное выражение (это больше похоже на подстановочное выражение , за исключением того, что вы будете использовать ? для сопоставления с одним символом) .

    • Чтобы соответствовать только токенам, которые начинаются с S, за которыми следуют 5 цифр, используйте S\d{5} или, чтобы соответствовать любому количеству цифр, используйте S\d+, как подсказывает TheIncorrigible1 .
      Кроме того, вы можете уточнить регулярное выражение, чтобы оно соответствовало только границам слов (\b): '\bS\d{5}\b'

  • Select-String не поддерживает вывод просто совпадающих частей строк, но вы можете сделать это путем дальнейшей обработки экземпляров [Microsoft.PowerShell.Commands.MatchInfo], которые он выводит.

Чтобы сложить все вместе:

Select-String -Path clm-server-test.txt -Pattern '\bS\d{5}\b' | 
  ForEach-Object { $_.Matches[0].Value }

При вводе образца это дает:

S32145
S12345
S09867 

В качестве отступления: Как видно из приведенной выше команды, Select-String в настоящее время не позволяет легко извлечь только совпадающие части строк ввода.
Если вы заинтересованы во внедрении переключателя, который упрощает это, участвуйте в обсуждении на GitHub .

...