我已经搜索了几天,但无法找到有关我的具体问题的任何信息。
我有一个日志文件,我想搜索(使用 findstr)“登录成功”,一旦找到,我想要一个时间戳,将整行和接下来的五行发送到文本文件。
我玩过 findstr 并尝试修改我在这里找到的其他建议,但无法找到一种方法将以下五行包含在我的输出中。
先感谢您,
埃里克
我已经搜索了几天,但无法找到有关我的具体问题的任何信息。
我有一个日志文件,我想搜索(使用 findstr)“登录成功”,一旦找到,我想要一个时间戳,将整行和接下来的五行发送到文本文件。
我玩过 findstr 并尝试修改我在这里找到的其他建议,但无法找到一种方法将以下五行包含在我的输出中。
先感谢您,
埃里克
从 UnxUtils http://unxutils.sourceforge.net/下载 grep
运行:grep -A 5 "登录成功" [日志文件名] > output.txt
@echo off
setlocal EnableDelayedExpansion
rem Look for the line with "Login Successful" and output it
(for /F "tokens=1* delims=:" %%a in ('findstr /N "Login Successful" theFile.log') do (
set skip=%%a
echo %date% @ %time%
echo %%b
)) > textFile.txt
rem Add the next five lines
set lines=0
for /F "skip=%skip% tokens=1* delims=:" %%a in ('findstr /N "^" theFile.log') do (
echo %%b>> textFile.txt
set /A lines+=1
if !lines! equ 5 goto :EOF
)
@ECHO OFF
SETLOCAL
SET /a gate=0
(
FOR /f "delims=" %%i IN ('type logfile.txt^|findstr /n "$" ') DO (
SET "line=%%i"
CALL :process
)
)>report.txt
GOTO :eof
:process
IF %gate% gtr 0 GOTO output
ECHO(%line%|FINDSTR /i /c:"login successful" >NUL
IF ERRORLEVEL 1 GOTO :EOF
SET /a gate=6
:output
SET /a gate -=1
SET "line=%line:*:=%"
ECHO(%line%
GOTO :eof
由于您没有说后面的 5 行中是否有任何可能为空,因此该findstr/n
方法用于重现任何空行。
本质上,如果找到目标字符串(我假设不区分大小写),则打开门以允许 6 行通过。如果门打开,则前导行号被剥离,所需行回显到目标文件中。