Новичок здесь, я работаю над файлом журнала ошибок и библиотекой, текущий шаг, который я делаю, — это извлечение конкретной информации из txt-файла.
Код, который у меня есть в настоящее время,...
$StatusErr = "Type 1","Type 2"
for ($i=0; $i -lt $StatusErr.length; $i++) {
get-content C:\blah\Logs\StatusErrors.TXT |
select-string $StatusErr[$i] |
add-content C:\blah\Logs\StatusErrorsresult.txt
}
пока он работает, мне нужно, чтобы он отображался как
Type-1-Description
2-Description
Type-1-Description
2-Description
Type-1-Description
2-Description
и т.п.
в настоящее время отображается как
Type 1 = Type-1-Description
Type 1 = Type-1-Description
Type 1 = Type-1-Description
Type 2 = 2-Description
Type 2 = 2-Description
Type 2 = 2-Description
Я не знаю, как изменить расположение и удалить ненужные пробелы и знак =
Вам нужно искать оба шаблона в одном вызове Select-String, чтобы получить совпадающие строки по порядку.
-Pattern
принимает массив шаблонов, в данном случае подойдет одно регулярное выражение.Вам нужно использовать шаблон регулярного выражения, чтобы захватить и вывести только часть совпадающих строк.
$StatusErrRegex = '(?<=Type [12]\s*=\s*)[^ ]+'
get-content C:\blah\Logs\StatusErrors.TXT |
select-string $StatusErrRegex |
foreach-object { $_.Matches.Value } |
set-content C:\blah\Logs\StatusErrorsresult.txt
Note that I've replaced add-content
with set-content
, as I'm assuming you don't want to append to a preexisting file. set-content
writes all objects it receives via the pipeline to the output file.
Select-String
выводит экземпляры Microsoft.PowerShell.Commands.MatchInfo, свойство .Matches
которых предоставляет доступ к совпавшей части строки.
Объяснение регулярного выражения и возможность экспериментировать с ним см. на этой странице regex101.com.
Дополнительные примечания:
Select-String
, как и PowerShell в целом, по умолчанию нечувствителен к регистру; добавьте переключатель -CaseSensitive
, если это необходимо.
(?<=...)
— это (положительное) ретроспективное утверждение, соответствующий текст которого не стал частью того, что захватывает регулярное выражение.
\s*
соответствует нулю или более пробельным символам; \s+
будет соответствовать одному или нескольким.
[^ ]+
соответствует одному или нескольким (+
) символам, которые не являются ^
пробелами (), и, таким образом, фиксирует последовательность не пробельных символов справа от знака
=
.
Чтобы сопоставить любое из нескольких слов в начале шаблона, используйте чередование регулярных выражений (|
), например. '(?<=(type|data) [12]\s*=\s*)[^ ]+'