更具体地说,情况如下:
我们使用Perl脚本来获取数据,并将数据以格式输出到文本文件。
Method: ...
Path: ...
Url: ...
Method: ...
Path: ...
Url: ...
(依此类推,无论如何都会产生。)
如果在" Path"中找到匹配的(预先指定的)字符串,我想保留其中一个块(Method,Path和Url)。例如。
我的理解是我需要以某种方式对块进行分组,但我不知道如何做到这一点。有没有办法这样做,然后保留块,如果在其中一个块中找到匹配的字符串'行呢?
例如,如果字符串" foo"删除上面的块2(Method,Path,Url)。在" Path"中找到。这些线条都非常独特,可以实现这一点。
我只找到了删除或保留单行的方法,如果它与字符串匹配,例如保留所有" Path"如果它匹配字符串的行。但这会删除其他不理想的东西。
亲切的问候。
答案 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
}