在日志文件中查找字符串,并将整行复制到新文件中

时间:2014-01-27 12:11:10

标签: batch-file replace substring

美好的一天。

我有一堆日志文件,其中包含文件夹路径中的某个文件夹,即“/ input”,它是路径名变化的一部分 - “/ input”是此处唯一的常量...

如何扫描所有日志文件(* .log),查找“/ input”和写入整行的所有子字符串实例,包含路径的这一部分,是“/ input”,是一个新的文本文件?

日志文件中一行的示例:

2014-01-16 00:33:57 10.0.1.169 ddca 192.168.34.11 21 CWD /DDAA/Input/ 250 0 0

如何将包含此部分“/ input”的所有行写入新文本文件?

感谢。

3 个答案:

答案 0 :(得分:1)

findstr /i /c:"/input" *.log >output.txt

/i开关使搜索大小写不敏感。使用/c:开关,以便不将前导/视为切换指示符。

因为使用了通配符,所以它会在每行前面加上文件名,后跟冒号,如下所示

filename.log:2014-01-16 00:33:57 10.0.1.169 ddca 192.168.34.11 21 CWD /DDAA/Input/ 250 0 0

答案 1 :(得分:1)

@echo off
    setlocal enableextensions

    set "source=c:\where\the\log\files\are"
    set "target=c:\output\folder\newFile.log"

    pushd "%source%"
    (for /f "tokens=1,* delims=:" %%a in ('findstr /i /l /c:"/input/ " "*.log"') do (
        echo(%%b 
    )) > "%target%"
    popd

使用findstr搜索字符串。它将返回一个字符串,其中包含找到该字符串的文件名,后跟冒号和日志文件中的整行。然后,使用for命令,使用冒号作为分隔符来分割此行,并回显该行的右侧部分(日志文件中的原始行)。然后将for命令的输出重定向到最终文件。

pushdpopd用于确保对日志文件的引用以及findstr命令输出中的名称不包含干扰分割的aditional冒号一部分。

答案 2 :(得分:0)

很多选择。你可以创建一个小工具来为你做这个,但我的猜测是某个地方已经完成了这个。你有没有谷歌这样的东西?

如果您需要一些手工操作,我知道Notepad ++具有搜索匹配(子)字符串的文件夹中的txt文件的功能。

也相关: https://superuser.com/questions/110350/how-to-use-notepad-to-find-files-in-a-directory-that-do-not-contain-string