Удалить строку в текстовом файле, если он содержит строку, а затем удалить следующие две строки - PullRequest
0 голосов
/ 25 февраля 2019

Я пытался Удалить строку текста и следующие от 0 до 5 строк с PowerShell 2 , но это удалило все в моем сценарии.

Я создаю сценарий PowerShell для анализаВывод LMtools.У меня есть строка, которая удаляет все, что не используется

$body = (($body -split "`n") |
        Where-Object {$_ -notmatch 'Total of 0 licenses in use'}) -join "`n"

Мне не нужно видеть используемые пакеты, поскольку следующие две лицензии показывают, что именно используется.

Мне нужно удалить строки с Users of Package: и две следующие строки.

Итак, это:

Users of Package: Autodesk AutoCAD:  (Total of 1 license issued;  Total of 1 license in use)
  "Package: Autodesk AutoCAD" v1.000, vendor: adskflex, expiry: permanent(no expiration date)
    UserH ybw-w7-15021 ybw-w7-15021 (v1.000) (licenseserver/27000 490), start Mon 2/25 10:38
Users of Package: AutoCAD - including specialized toolsets:  (Total of 1 license issued;  Total of 1 license in use)
  "Package: AutoCAD - including specialized toolsets" v1.000, vendor: adskflex, expiry: 15-feb-2020
    UserA DC18007-W10 DC18007-W10 (v1.000) (licenseserver/27000 114), start Mon 2/25 10:50
Users of Autodesk AutoCAD 2017:  (Total of 4 licenses issued;  Total of 1 license in use)
  "Autodesk AutoCAD 2017" v1.000, vendor: adskflex, expiry: 15-feb-2020
    UserA DC18007-W10 DC18007-W10 (v1.0) (licenseserver/27000 214), start Mon 2/25 10:50
Users of Autodesk AutoCAD 2015:  (Total of 4 licenses issued;  Total of 1 license in use)
  "Autodesk AutoCAD 2015" v1.000, vendor: adskflex, expiry: permanent(no expiration date)
    UserH DCw7-15021 DCw7-15021 (v1.0) (licenseserver/27000 390), start Mon 2/25 10:38

просто становится таким:

Users of Autodesk AutoCAD 2017:  (Total of 4 licenses issued;  Total of 1 license in use)
  "Autodesk AutoCAD 2017" v1.000, vendor: adskflex, expiry: 15-feb-2020
    UserA DC18007-W10 DC18007-W10 (v1.0) (licenseserver/27000 214), start Mon 2/25 10:50
Users of Autodesk AutoCAD 2015:  (Total of 4 licenses issued;  Total of 1 license in use)
  "Autodesk AutoCAD 2015" v1.000, vendor: adskflex, expiry: permanent(no expiration date)
    UserH DCw7-15021 DCw7-15021 (v1.0) (licenseserver/27000 390), start Mon 2/25 10:38

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете читать входные данные построчно, а затем пропускать строки, соответствующие «Users of Package:» и следующим двум строкам.Однако, поскольку весь ваш входной файл, кажется, состоит из групп из 3 строк, я бы, вероятно, использовал Select-String с отрицательным прогнозным прогнозом.

$pattern = '^Users of (?!Package:)'
Get-Content 'input.txt' | Select-String $pattern -Context 0,2 | ForEach-Object {
    $_.Line
    $_.Context.PostContext
} | Set-Content 'output.txt'

Шаблон соответствует строке «Users of» в началестроки (^), когда за ней не следует строка "Package:".

Использование -Context 0,2 включает две следующие входные строки с соответствием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...