标题: [文本处理] [已解决]批处理怎样把两个文本合并后去除重复的行? [打印本页]
作者: vokins 时间: 2013-9-3 20:43 标题: [已解决]批处理怎样把两个文本合并后去除重复的行?
本帖最后由 vokins 于 2013-9-4 18:03 编辑
求助,
我想下载
http://webscan.360.cn/url
这个网页,并把网页代码中的其余部分去除掉。- <!--end tips -->
- <script>
- $(function(){
- $("#menu-more").hover(function(){
- $("#menu-more-list").show();
- $("#menu-more").css("background-color","#3764B2");
- $("#menu-more").css("padding-bottom","2px");
- },function(){
- $("#menu-more-list").hide();
- $("#menu-more").css("background-color","");
- $("#menu-more").css("padding-bottom","0px");
- })
-
- })
- </script>
-
- <div class="faq clearfix">
- <!--<div class="fqa_navigation"><a href="#" title="">漏洞库</a> ›</div>-->
- <div class="faq_conbox">
- <h2 style="color:#333;width:86%;margin-bottom:10px;padding: 2px 10px;font-size:14px;padding:2px 10px;background: none repeat scroll 0 0 #FFE6E6;border: 1px solid #EEBBBB;">如下网址可能会对您的电脑造成伤害:如在您的电脑上安装恶意软件;通过欺诈钓鱼页面窃取您的账号等重要信息。请勿随意访问。
- </h2>
-
- <h2>今天排行</h2>
- <li><a href="/url/www.70pao.com.html" title="www.70pao.com恶意网站,www.70pao.com是什么">www.70pao.com</a></li>
-
-
- <h2>昨天排行</h2>
- <li>
- <ul>
- <li><a href="/url/www.63kxw.com.html" title="www.63kxw.com恶意网站,www.63kxw.com是什么">www.63kxw.com</a></li>
- <li><a href="/url/www.688mi.com.html" title="www.688mi.com恶意网站,www.688mi.com是什么">www.688mi.com</a></li>
- <li><a href="/url/www.70238.com.html" title="www.70238.com恶意网站,www.70238.com是什么">www.70238.com</a></li>
- <li><a href="/url/www.70cj.net.html" title="www.70cj.net恶意网站,www.70cj.net是什么">www.70cj.net</a></li>
- <li><a href="/url/www.70pao.com.html" title="www.70pao.com恶意网站,www.70pao.com是什么">www.70pao.com</a></li>
- <li><a href="/url/www.723724.com.html" title="www.723724.com恶意网站,www.723724.com是什么">www.723724.com</a></li>
- <li><a href="/url/www.7241.cn.html" title="www.7241.cn恶意网站,www.7241.cn是什么">www.7241.cn</a></li>
- <li><a href="/url/www.738393.com.html" title="www.738393.com恶意网站,www.738393.com是什么">www.73839
复制代码
只保留哪些恶意网址的域名,
并在每个域名前加入0.0.0.0。
变成:
0.0.0.0 www.70cj.net
0.0.0.0 www.7241.cn
0.0.0.0 www.738393.com
......
这是我自己写的代码,有点烂,效率还低,请高手指教- wget http://webscan.360.cn/url -O url.txt
- sed -i "1,91d" url.txt
- sed -i "2143,$d" url.txt
- sed -i "s/^[ \t]*//g" url.txt
- sed -i "s/>/\n/g" url.txt
- sed -i "s/</\n/g" url.txt
- sed -i "s/.*<li><a[^>]*>//" url.txt
- sed -i "/.html/d" url.txt
- sed -i "/行/d" url.txt
- sed -i "/网/d" url.txt
复制代码
ps.我还在mwsl下载了hosts文件,想把这个同上面的360 合并,但是会有重复的行,不知道如何去除。
当然用akelpad之类的编辑器手动删除重复行就好了,但是有没有可以用批处理解决全自动的办法呢?
:mwsl
del Mwsl.txt
wget http://www.mwsl.org.cn/hosts/hosts -O Mwsl.txt
sed -i "1,9d" Mwsl.txt
sed -i "1i\#Malicious Web site Labs" Mwsl.txt
sed -i "s/50.118.116.68/0.0.0.0/g" Mwsl.txt
goto :eof
再次请教,盼复
作者: batman 时间: 2013-9-3 22:06
先把网页另存为web.html,然后运行下面的vbs代码:- Dim objDOM, objTexts, objText, objYM, File
- Path = CreateObject("Wscript.Shell").CurrentDirectory
- File = "url.txt"
- Set objDOM = GetObject(Path & "\web.html","htmlfile")
- Do Until objDOM.Readystate = "complete" : WScript.Sleep 200 : Loop
- Set objTexts = objDOM.GetElementsByTagName("li")
- For Each objText In objTexts
- If InStr (objYM, objText.InnerText) = 0 Then _
- objYM = objYM & "0.0.0.0 " & objText.InnerText & vbCrLf
- Next
- Dim objFSO, objSHELL
- Set objFSO = CreateObject("Scripting.FileSystemObject")
- objFSO.OpenTextFile(File,2,1).Write objYM
- Set objSHELL = CreateObject("Wscript.Shell")
- objSHELL.Run "cmd /cstart " & File,0,0
- Set objFSO = Nothing
- Set objSHELL = Nothing
- Set objDOM = Nothing
复制代码
作者: luke 时间: 2013-9-4 00:12
用powershell吗?
访问http://webscan.360.cn/url 将url输出到一个文本中,以后可以设置为任务计划定期跑
$hashset=New-Object System.Collections.Generic.HashSet[string]
$desFile="d:\1\file.txt"
$url="http://webscan.360.cn/url"
$item=Invoke-WebRequest $url
$item.ParsedHtml.getElementsByTagName("li") | %{
if($hashset.add($_.innerText)){
"0.0.0.0 "+$_.innerText | Out-File -FilePath $desFile -Append
}
}
作者: batman 时间: 2013-9-4 00:53
也可以直接用IE对象来访问- Dim objIE, objTexts, objText, objYM, File, Url
- Path = CreateObject("Wscript.Shell").CurrentDirectory
- File = "url.txt"
- Url = "http://webscan.360.cn/url"
- Set objIE = createObject("InternetExplorer.Application")
- objIE.Navigate Url
- objIE.Visible = False
- Do Until objIE.Readystate = 4 : WScript.Sleep 200 : Loop
- Set objTexts = objie.Document.GetElementsByTagName("li")
- For Each objText In objTexts
- If InStr (objYM, objText.InnerText) = 0 And _
- InStr (objText.InnerText, "www") Then _
- objYM = objYM & "0.0.0.0 " & objText.InnerText & vbCrLf
- Next
- objIE.Quit
- Dim objFSO, objSHELL
- Set objFSO = CreateObject("Scripting.FileSystemObject")
- objFSO.OpenTextFile(File,2,1).Write objYM
- Set objSHELL = CreateObject("Wscript.Shell")
- objSHELL.Run "cmd /cstart " & File,0,0
- Set objFSO = Nothing
- Set objSHELL = Nothing
- Set objie = Nothing
复制代码
作者: terse 时间: 2013-9-4 01:02
三方的 GAWK wget- @echo off
- (wget -q -O- http://webscan.360.cn/url | gawk "BEGIN {print \"#Malicious Web site Labs\"};/\.html/{print $0=gensub(/.*url\/(.+)\.html.*/,\"0.0.0.0 \\1\",\"1\")}"
- wget -q -O- http://www.mwsl.org.cn/hosts/hosts | gawk "NR>9{print \"0.0.0.0\",$2}"
- )>hosts.txt
- gawk "!a[$0]++" <hosts.txt>hosts
- del hosts.txt
- pause
复制代码
作者: vokins 时间: 2013-9-4 08:59
三方的 GAWK wget
terse 发表于 2013-9-4 01:02
再追加一个问题,比如我本地有一个txt的hosts文件a,b,c。
然后用上面的代码合成下载了恶意网站列表,发现和本地的文件又重复,应该怎么去除重复呢?
gawk "!a[$0]++" <a.txt>b.txt吗?
或者我是否可以这样做:
就是我用编辑器把重复的行提取到文件 chongfu.txt里面,用刚才的合成的文件在chongfu.txt里面查找去除重复?
应该如何操作呢?
作者: vokins 时间: 2013-9-4 09:00
回复 3# luke
非常感谢您的解答。
作者: vokins 时间: 2013-9-4 09:01
回复 4# batman
非常感谢版主的解答,这个直接用ie访问对象的办法也不错,就是速度稍微有些慢。
作者: terse 时间: 2013-9-4 10:59
回复 6# vokins - (gawk "!a[$0]++" "a.txt" "b.txt" "c.txt" "d.txt")>e.txt
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |