如何使用Windows命令行工具或批处理文件从日志文件中提取行?

时间:2010-01-21 07:29:44

标签: regex powershell batch-file

我想使用本机Windows命令行工具或批处理文件(.bat)从日志文件中提取某些行。这是一个示例日志文件:

2009-12-07 14:32:38,669 INFO  Sample log
2009-12-07 14:32:43,029 INFO  Sample log
2009-12-07 14:32:45,841 DEBUG Sample log
2009-12-07 14:32:45,841 DEBUG Sample log
2009-12-07 14:32:52,029 WARN  Sample log
2009-12-07 14:32:52,466 INFO  Sample log

如何提取和打印带有“WARN”标签的行?如何使用PowerShell执行此操作?

6 个答案:

答案 0 :(得分:7)

一种方式:

findstr WARN log.txt

更复杂:

for /f "tokens=1,2,3,4* delims=, " %i in (log.txt) do @if "%l"=="WARN" echo %i %j %m

OUTPUT:
2009-12-07 14:32:52 Sample log

答案 1 :(得分:7)

您可以使用select-string:

使用PowerShell执行此操作
select-String  WARN  *.log 

答案 2 :(得分:2)

如果PowerShell(由Alon建议)不是一个选项,也许Logparser可以满足您的需求:http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en

答案 3 :(得分:1)

有几种方法,findtr / find就像别人给你看的那样。或者你可以使用vbscript

Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile= objArgs(0)
Set objFile = objFS.OpenTextFile(strFile)
Do Until objFile.AtEndOfStream
    strLine = objFile.ReadLine
    If InStr(strLine,"WARN") > 0 Then
        WScript.Echo strLine
    End If 
Loop

另存为mygrep_warn.vbs并在命令行

c:\test> cscript //nologo mygrep_warn.vbs myfile.log

其他方法,如果您可以下载内容并使用GNU *nix tools ported to win32

C:\test>grep -i "warn" file
2009-12-07 14:32:52,029 WARN  Sample log

C:\test>gawk "BEGIN{IGNORECASE=1}/warn/" file
2009-12-07 14:32:52,029 WARN  Sample log

答案 4 :(得分:1)

Get-EventLog -LogName application -EntryType warning

并根据需要导出输出

答案 5 :(得分:0)

你可以随时尝试原始的DOS“查找”命令,但它非常糟糕:

c:>find " WARN " filename.log

---------- FILENAME.LOG
2009-12-07 14:32:52,029 WARN  Sample log

c:>

您也不能在文件名中使用通配符。