标题: [文本处理] [已解决]批处理如何截取复杂文本WindowsUpdate.log中的指定内容? [打印本页]
作者: stance 时间: 2012-11-17 18:38 标题: [已解决]批处理如何截取复杂文本WindowsUpdate.log中的指定内容?
WindowsXP的Windows目录下有个WindowsUpdate.log文件,有下载更新补丁的记录。我要查询它,产生两种结果:
一、截取KB补丁号
1、以KB开头,由6或7位数字跟随。例如:KB898030、KB2761226等等。
2、去除重复的补丁号,只保留不重复的。
二、截取exe文件的下载链接
以HTTP开头,以EXE结尾,中间有KB特征字符。例如:http://au.download.windowsupdate ... 09e8c2bf893ad7e.exe
作者: andyrave 时间: 2012-11-17 22:32
截取一段文本 50K文本里面内容已经很多了 上传上来 有些不用XP系统的人也可以看看 或许有些帮助
作者: stance 时间: 2012-11-17 22:47
回复 2# andyrave
谢谢关注。本来没装WINRAR,特地了装一下.
作者: tmplinshi 时间: 2012-11-17 23:55
本帖最后由 tmplinshi 于 2012-11-18 01:13 编辑
- sed -n -r "s/KB[0-9]{6,7}/\n&\n/igp" WindowsUpdate.log | sed "/KB[0-9]\{6,7\}/!d" | sort | sed "$!N; /^\(.*\)\n\1$/!P; D" >KB.txt
复制代码
- sed -n "s|http://.*/.*kb.*\.exe|\n&\n|ip" WindowsUpdate.log | sed "/^http:\/\/.*\/.*kb.*\.exe$/!d" >urls.txt
复制代码
sed 下载地址: http://bathome.net/thread-15605-1-4.html
作者: apang 时间: 2012-11-18 00:48
vbs试试?- Set FSO = CreateObject("Scripting.FileSystemObject")
- Text = FSO.OpenTextFile("WindowsUpdate.log",1).ReadAll
- CreateMyFile "kb[0-9]{6,7}","a.txt"
- CreateMyFile "http://.*?\.exe","b.txt"
- MsgBox "OK"
-
- Sub CreateMyFile(Pattern,File)
- Set Re = New RegExp
- Re.Pattern = Pattern
- Re.Global = True
- Re.IgnoreCase = True
- For Each Match in Re.Execute(Text)
- If InStr(LCase(Str), LCase(Match)) = 0 Then
- Str = Str & Match & vbCrLf
- End If
- Next
- FSO.CreateTextFile(File,True).Write Str
- Str = ""
- End Sub
复制代码
作者: stance 时间: 2012-11-18 00:51
本帖最后由 stance 于 2012-11-18 01:15 编辑
回复 4# tmplinshi
谢谢tmplinshi版主!
不过,我想用DOS自带工具来解决问题,不知行不?
SED从来没用过,一点也不熟悉.倒是很想学学.
作者: stance 时间: 2012-11-18 01:13
回复 5# apang
谢谢Apang!
试了一下VBS,输出KB补丁号40个,输出下载链接46个。
补丁号数不足,应该多于链接数,总数应过百.
作者: apang 时间: 2012-11-18 02:59
回复 7# stance
数了一下:如果删掉代码第13行和第15行(即不排除重复项),搜索到的全部KB补丁是586个,下载地址数是54个。
排除重复项后数目就对不上号,这个我不清楚。这方面你在行,看看是不是其他原因。。。
作者: cjiabing 时间: 2012-11-18 08:46
本帖最后由 cjiabing 于 2012-11-18 09:27 编辑
- @echo off & setlocal enabledelayedexpansion
- cd.>tmp.txt
- for /f "tokens=2 delims=()" %%a in ('findstr /i "KB" WindowsUpdate.log') do echo;%%a>>tmp.txt
- set num=0
- for /f "tokens=*" %%a in ('findstr /v /l /c:" " tmp.txt^|sort') do (
- if not defined %%a set %%a=A&set /a num+=1&echo [!num!].%%a
- )
- echo 共 !num! 个升级补丁。
- pause
- set num=0
- for /f "tokens=9" %%a in ('findstr /i "from to" WindowsUpdate.log^|findstr /i "exe psf"') do set /a num+=1&echo [!num!].%%a
- echo 共 !num! 个升级地址。
- pause
复制代码
数目对不上:34个补丁,57个地址?
KB应该没错了,我一个一个的对过。地址可能是因为有些失效,还有些是cab格式的没有搜索,有点累,不弄了。
作者: jwwlchen 时间: 2012-11-18 22:05
回复 9# cjiabing
你好 ,问个问题
'findstr /i "from to" WindowsUpdate.log^|findstr /i "exe psf"'
红色部分什么意思?? 看不懂。
作者: cjiabing 时间: 2012-11-18 23:25
回复 10# jwwlchen
管道,水管,把第一个findstr的结果输送给第二个findstr。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |