PowerShell для удаления соответствующей строки плюс сразу после строки - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь преобразовать сценарий «sed», который я использую на своем компьютере с FreeBSD, в сценарий, использующий «Powershell» в Windows 10.

Это сценарий sed.Он используется для удаления заголовка из электронного письма плюс непосредственно следующей строки и отправки вывода в «email_1.txt».Файл подается в скрипт в командной строке;например, «КОМАНДНЫЙ файл»

sed '/Received: by 2002:a17:90a:3566:0:0:0:0/,/^/d' <$1> email_1.txt

Я не могу найти способ заставить это работать с «PowerShell».

Спасибо!

1 Ответ

0 голосов
/ 11 декабря 2018

У вас есть несколько вариантов.

  1. Установка sed - здесь может пригодиться что-то вроде scoop .

  2. Написать чистое решение PowerShell.Это будет очень похоже на то, что вы написали бы, если бы попытались сделать то же самое в «чистом» bash.Вот попытка сделать это:

-

function Delete-TargetLines {
    [cmdletbinding()]
    param(
        [String]$needle,

        [int]$count = [int]1,

        [parameter(ValueFromPipeline)]
        [string[]]$haystack
    )

    Begin {
        [int]$seen = 0
    }

    Process {
        if ($seen -gt 0) {
            $seen -= 1
        } elseif ( $haystack -match $needle ) {
            $seen = 1
        } else {
            $haystack
        }
    }
}

И пример запуска:

> @("Pre-line", "This is a test", "second line", "post line") | Delete-TargetLines -needle "test"
Pre-line
post line

> Get-Content $myfile | Delete-TargetLines -needle 'value' > $outfile
...