PowerShell删除匹配行以及紧随其后的行

时间:2018-11-14 11:42:29

标签: powershell-v5.0

我正在尝试将FreeBSD机器上使用的“ sed”脚本转换为Windows 10上使用“ Powershell”的脚本。

这是sed脚本。它用于从电子邮件中删除标题以及紧随其后的行,然后将输出发送到“ email_1.txt”。该文件通过命令行输入到脚本。即“命令文件”

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="app" ng-controller="ctrl">


<table border="1">
  <tr>
    <th>Affiliate name</th>
    <th>Referral name</th>
    <th>Affiliate bonus</th>
  </tr>
  <tbody ng-repeat="item in items">
    <tr ng-repeat="ref in item.referrals">
      <td ng-if="$index == 0" rowspan={{item.referrals.length}}>{{item.login}}</td>
      <td>{{ref.login}}</td>
      <td>{{ref.bonusAmount > 0 ? '$' + ref.bonusAmount:''}}</td>
    </tr>
  </tbody>
</table>

</div>

我找不到使它与“ PowerShell”一起使用的方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

您有两种选择。

  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