Разобрать информацию из текстового файла — Powershell

Новичок здесь, я работаю над файлом журнала ошибок и библиотекой, текущий шаг, который я делаю, — это извлечение конкретной информации из 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  

Я не знаю, как изменить расположение и удалить ненужные пробелы и знак =

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Вам нужно искать оба шаблона в одном вызове 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*)[^ ]+'

Другие вопросы по теме