Игнорирование кавычек в текстовой строке в Powershell - PullRequest
2 голосов
/ 28 апреля 2020

У меня есть этот фрагмент кода

     Get-Content -Tail 0 -Wait -Encoding "UTF8" $log | 
       Select-String "GroupEvents: Linedup for group “(.*)”, subgroup" |
        % {$_.matches.groups[1].value} |
         Write-SlowOutput -outputFile $output -waitFor $delay

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

Фрагмент - это часть скрипта PowerShell, который ищет файл журнала игры на моем p c и записывает извлеченный текст в текстовый файл.

Любая помощь приветствуется, спасибо.

ОБНОВЛЕНИЕ - Правильно ли я считаю, что использую серьезный акцент, чтобы не использовать кавычки для разграничения?

1 Ответ

2 голосов
/ 28 апреля 2020

Если я понимаю, я думаю, что проблема в том, что вы должны избегать кавычек внутри оператора Select-String. Один из способов сделать это с помощью символа серьезного акцента (`) внутри строк в двойных кавычках:

Select-String "GroupEvents: Linedup for group `"(.*)`", subgroup" |

Другой вариант - использовать одинарные кавычки снаружи строки, которые не требуют экранирования:

Select-String 'GroupEvents: Linedup for group "(.*)", subgroup' |

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

Get-Content -Tail 0 -Wait -Encoding "UTF8" $log | 
   Select-String 'GroupEvents: Linedup for group "(.*)", subgroup' |
    % {$_.matches.groups[1].value} |
     Write-SlowOutput -outputFile $output -waitFor $delay
...