Использование Powershell для сопоставления шаблона со всеми вхождениями в текстовом файле - PullRequest
1 голос
/ 10 апреля 2020

У меня есть текстовый файл, и я использую Powershell для перечисления имен, присутствующих в приведенном ниже шаблоне

Содержимое файла:

beta-clickstream-class="owner:"mike""
beta-clickstream-class="owner:"kelly""
beta-clickstream-class="owner:"sam""
beta-clickstream-class="owner:"joe""
beta-clickstream-class="owner:"john""
beta-clickstream-class="owner:"tam""

Вывод Я ищу

mike
kelly
sam
joe
john
tam

Используемый мной скрипт:

$importPath = "test.txt"
$pattern = 'beta-clickstream-class="owner:"(.*?)""'
$string = Get-Content $importPath
$result = [regex]::match($string, $pattern).Groups[1].Value
$result

Выше приведен скрипт, в котором указано только имя файла. Подскажите, пожалуйста, как составить список всех имен в файле.

1 Ответ

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

Get-Content возвращает массив строк, поэтому вам придется вызывать [regex]::match() для каждого элемента массива $string.

Однако, -replace оператор , предложенный AdminOfThings , позволяет упростить решение:

(Get-Content $importPath) -replace '.+owner:"([^&]+).+', '$1'

В качестве альтернативы, вы могли бы прочитать файл в одиночная , многострочная строка с Get-Content -Raw, за которой следует [regex]::Matches() (несколько совпадений), а не [regex]::Match() (одиночное совпадение).

...