如果其中一个组行包含使用powershell的特定字符串,如何在文本文件中保留一组行?

时间:2016-10-10 14:00:23

标签: powershell

更具体地说,情况如下:

我们使用Perl脚本来获取数据,并将数据以格式输出到文本文件。

Method: ...
Path: ...
Url: ...

Method: ...
Path: ...
Url: ... 

(依此类推,无论如何都会产生。)

如果在" Path"中找到匹配的(预先指定的)字符串,我想保留其中一个块(Method,Path和Url)。例如。

我的理解是我需要以某种方式对块进行分组,但我不知道如何做到这一点。有没有办法这样做,然后保留块,如果在其中一个块中找到匹配的字符串'行呢?

例如,如果字符串" foo"删除上面的块2(Method,Path,Url)。在" Path"中找到。这些线条都非常独特,可以实现这一点。

我只找到了删除或保留单行的方法,如果它与字符串匹配,例如保留所有" Path"如果它匹配字符串的行。但这会删除其他不理想的东西。

亲切的问候。

1 个答案:

答案 0 :(得分:0)

您可以使用Select-String -Context在匹配前后包含字符串:

Select-String -Path C:\file.txt -Pattern "^Path: ((?!foo).)*$" -Context 1

假设输入文件如下:

Method: GET
Path: some bar path
Url: http://google.com

Method: POST
Path: some foo path
Url: http://bing.com

输出如下:

  C:\file.txt:1:Method: GET
> C:\file.txt:2:Path: some bar path
  C:\file.txt:3:Url: http://google.com

要获得行本身,您需要从输出中获取适当的上下文属性:

Select-String -Path C:\file.txt -Pattern "^Path: ((?!foo).)*$" -Context 1 |ForEach-Object {
    $_.Context.PreContext,$_.Line,$_.Context.PostContext |Out-File C:\output.txt -Append
}