Искать строку в текстовом файле и выводить ее контекст в Powershell?

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

$StateCheck = Select-String -Path C:\ImageManagerTool\Results.txt -Pattern "State:*"
$SValueCheck = Select-String -Path C:\ImageManagerTool\Results.txt -Pattern "State Value:*"

If(Get-Content C:\ImageManagerTool\Results.txt | %{$StateCheck -notmatch "State: Active"})
{
    Get-Content C:\ImageManagerTool\Results.txt | Select-String -Pattern "State:*"-Context 2,7| Select-String -Pattern "State: Active" -NotMatch |Select-String -Pattern "State Value:*" -NotMatch
} 

If(Get-Content C:\ImageManagerTool\Results.txt | %{$SValueCheck -notmatch "State Value: 0"})
{
    Get-Content C:\ImageManagerTool\Results.txt | Select-String -Pattern "State Value:*"-Context 3,6| Select-String -Pattern "State Value: 0" -NotMatch
}

Результаты вышеуказанного сценария:

Искать строку в текстовом файле и выводить ее контекст в Powershell?

Пока что все, что мне удалось сделать, это вывести экземпляры строк, которые я хочу найти, но не их контекст. При текущей настройке операторов if для фильтрации данных для строк, которые не совпадают, я не понял, будет ли использование параметра -context работать в этой ситуации, поскольку -context недействителен при получении Select- Строковые команды. При чтении Microsoft описания -Context на сайте PowerShell говорится, что контекст хранится как массив строк в свойстве context объекта. Есть ли способ переписать свои части скрипта, чтобы получить желаемый эффект (например, переключатель?), Или использовать параметр контекста в качестве свойства для вывода его данных?

Вместо того, чтобы читать файл C:\ImageManagerTool\Results.txt несколько раз, сохраните его в переменной и действуйте в соответствии с ней. Также покажите содержание редактирование вашего вопроса.

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

Ответы 1

Ответ принят как подходящий

Ваши операторы if совершенно не нужны - Select-String просто ничего не вернет, если ничто не соответствует указанному вами шаблону.

Для второго совпадения регулярного выражения вы можете проверить совпадающую строку с помощью Where-Object вместо цепочки Select-String:

Select-String -Path C:\ImageManagerTool\Results.txt -Pattern "State:*"-Context 2,7|Where-Object {$_.Line -notmatch "State: Active" -and $_.Line -notmatch "State Value:*"}

Второй пример можно упростить еще больше, просто убедитесь, что все, что идет после State Value:, не является 0 - вы можете использовать инвертированный набор символов, например [^0]:

Select-String -Path C:\ImageManagerTool\Results.txt -Pattern "State Value: [^0]" -Context 3,6

Строка для 'State Value' отлично работает, но строка для 'State' показывает только фрагменты данных, и выполнение обеих этих строк в одном скрипте будет запускать каждый из их запросов отдельно друг от друга (т.е. вывод будет показывать строку 308, а затем перейдите к строке 183 и начните оттуда). В случае «Состояние», находится ли контекст в рамках поиска Where-Object?

iExist 18.06.2018 20:36

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