所以我有一个文本文件,其中填写了这种格式
Identifier: NUMBER1
Information1 = something
Information2 = other something
Information3 = more something
Indentified: NUMBER2
Information1 = something
Information2 = other something
Information3 = more something
我尝试过使用findstr但是,与grep不同,它不能给我一些上下文。
如何获取上下文行以便我可以搜索其他信息?
如果可以,我可以在Windows上安装grep和awk等,但这是一个向其他人发布的工具,因此我只能使用操作系统的本机,在这种情况下是批处理和VBS。
我想要做的等效unix表达式如下:
grep -A 4 "NUMBER1" file | grep "Information2" | awk ' { print $3 } ' #not sure if $3 or $2 off the top of my head
答案 0 :(得分:1)
试试这个:
@ECHO off&SETLOCAL
FOR /f "delims=:" %%a IN ('findstr /n "NUMBER1" file') DO SET "skip=%%a"
FOR /f "tokens=2*" %%b IN ('more +%skip% file ^| findstr "Information2"') DO IF NOT DEFINED line SET "line=%%c"
ECHO %line%
另见findstr /?
。
答案 1 :(得分:1)
你可以在VBScript中做这样的事情:
If WScript.Arguments.Count <> 2 Then
WScript.Echo "Usage: " & WScript.ScriptName & " pattern filename"
WScript.Quit 1
End If
Const Context = 3 'lines
Set fso = CreateObject("Scripting.FileSystemObject")
Set re = New RegExp
re.Pattern = WScript.Arguments(0)
n = 0
Set f = fso.OpenTextFile(WScript.Arguments(1))
Do Until f.AtEndOfStream
line = f.ReadLine
If re.Test(line) Then
WScript.Echo line
n = Context
ElseIf n > 0 Then
WScript.Echo line
n = n - 1
End If
Loop
f.Close
Hovever,这只是一个非常基本的草案,有很大的改进空间(例如,将上下文行的数量作为参数,在上下文之前添加等)。
答案 2 :(得分:0)
除非您使用的是相当旧的系统,否则您可能已安装了Windows powershell。使用Powershell,您可以执行类似于grep的操作,如下所示:
Get-Content <filename> | Where-Object {$_ -like "*<pattern>*"}
答案 3 :(得分:0)
您可以使用一个非常有用的类似grep的工具,它是一个名为findrepl.bat的辅助批处理文件 - http://www.dostips.com/forum/viewtopic.php?f=3&t=4697
type "file.txt"|findrepl "NUMBER2" /O:-0:+3
您可以从搜索结果窗口进一步搜索。