中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何替换html文件中的链接
作者:
标题: [已结]如何替换html文件中的链接 上一主题 | 下一主题
samuel
初级用户





积分 22
发帖 9
注册 2007-12-28
状态 离线
『楼 主』:  [已结]如何替换html文件中的链接

我要在html文件中的href=“/后追加一部分固定的字符串如:将href=“/abc.html"
改为href=“/aaa/abc.html"
我用set处理时发现
1、原字符串中的 = " 都需要转义,否则没法正确替换;
2、新文件里的中文都是乱码
下面是我写的代码,请大侠们指点,不胜感激!:)
---------------------------
@echo off
for /f "delims=" %%i in ('dir /a /b /s *.html') do (
for /f "delims=" %%a in (%%i) do (
    set var=%%a
    set "var=!var:%%href="/=href=”/aaa/%%!"
    echo !var!>>%%i.txt
)
del %%i
ren "%%i.txt" %%i
)
---------------------

[ Last edited by samuel on 2008-1-1 at 07:46 PM ]

2007-12-31 12:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 2 楼』:  

sed "s/\(href=\x22\)\(.*\.html\x22\)/\1aaa\2/g" test.html

[ Last edited by junchen2 on 2007-12-31 at 12:55 PM ]

2007-12-31 12:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
samuel
初级用户





积分 22
发帖 9
注册 2007-12-28
状态 离线
『第 3 楼』:  这是什么原因?

sed: couldn't write 126 items to stdout: Invalid argument

2007-12-31 17:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 4 楼』:  

测试文件贴出来看看

2008-1-1 00:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
samuel
初级用户





积分 22
发帖 9
注册 2007-12-28
状态 离线
『第 5 楼』:  

就是下面这个主页
http://www.panjueshu.com/

我要在里面有 href="/  href=‘/  href=/
的/ 前加上个.
变成href="./  href=‘./  href=./

:)
新年快乐!

2008-1-1 00:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
samuel
初级用户





积分 22
发帖 9
注册 2007-12-28
状态 离线
『第 6 楼』:  

H:\新建文件夹>sed "s/\(href=\/\)/\(href=\).\//g"  www.panjueshu.html    >1panjueshu.html
^C终止批处理操作吗(Y/N)? Y
执行这个好像会死循环似的,要强行中止

[ Last edited by samuel on 2008-1-1 at 01:13 AM ]

2008-1-1 00:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 7 楼』:  

sed "s/\(<a href=['|\x22]\?\)\([^>]*\)/\1.\2/g"  www.panjueshu.html >test.html


新年快乐!



curl "http://www.panjueshu.com/"|sed "s/\(<a href=['|\x22]\?\)\([^>]*\)/\1.\2/g" >test.html

[ Last edited by junchen2 on 2008-1-1 at 01:54 AM ]

附件 1: curl.rar (2008-1-1 01:56, 165.01 K,下载次数: 7)
2008-1-1 01:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
samuel
初级用户





积分 22
发帖 9
注册 2007-12-28
状态 离线
『第 8 楼』:  

谢谢junchen2:)
一个奇怪的现象:
www.panjueshu.html页面我已经下载到了本机
H:\新建文件夹>sed "s/\(<a href=['|\x22]\?\)\([^>]*\)/\1.\2/g"  www.panjueshu.html    >1panjueshu.html
执行这个十分钟仍然没有完成替换,要强行中止。中止后发现替换后的文件只有8.33k,而原文件的大小是17.7k。我试了好几次都是这样,生成的文件只有8.33k。


强制结束程序以后,新生成的文件末端如下:
------------------------
<p>…………………………………………………………………………………………………………
2121012080056205)。逾期不交按自动撤回上诉处理。
</p>

[ Last edited by samuel on 2008-1-1 at 10:00 AM ]

2008-1-1 04:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 9 楼』:  

可能是你SED的问题,我这里测试正常,你再运行下面的看看,我发一个SED上来。
curl "http://www.panjueshu.com/"|sed "s/\(<a href=['|\x22]\?\)\([^>]*\)/\1.\2/g" >test.html



--------------------------------------------------------------------------------
<td><a href="./shaanxi/shaanxi.shtml">陕西</a></td><td><a href="./shanxi/shanxi.shtml">山西</a></td>
<td><a href="./xinjiang/xinjiang.shtml">新疆</a></td><td><a href="./gansu/gansu.shtml">甘肃</a></td>
<td><a href="./ningxia/ningxia.shtml">宁夏</a></td><td><a href="./qinghai/qinghai.shtml">青海</a></td>
<td><a href="./xizang/xizang.shtml">西藏</a></td><td><a href="./hongkong/hongkong.shtml">香港</a></td>
<td><a href="./macau/macau.shtml">澳门</a></td><td><a href="./taiwan/taiwan.shtml">台湾</a></td>


<li><a href=./lawyer/lawyer-3.shtml>律师名录3</a></li>
          <li><a href=./lawyer/lawyer-4.shtml>律师名录4</a></li>



<li><a href='./hunan/gaoyuan/zhangdeyuan.shtml'>湖南省国际信托投资公司董事长张德元受贿案</a></li>
<li><a href='./guizhou/gaoyuan/yanjianhong.shtml'>贵州省国际信托投资公司董事长闫健宏贪污案</a></li>
<li><a href='./gaoyuan/court/gaosunxiang.shtml'>原中信实业银行深圳分行行长高森祥受贿案</a></li>

--------------------------------------
上面是部分结果

[ Last edited by junchen2 on 2008-1-1 at 11:32 AM ]

2008-1-1 11:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 10 楼』:  

我发一个sed上来,刚才发不上来,下面是一前辈收集的SED
http://www.vkill.net/tools.html

[ Last edited by junchen2 on 2008-1-1 at 11:38 AM ]

2008-1-1 11:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
samuel
初级用户





积分 22
发帖 9
注册 2007-12-28
状态 离线
『第 11 楼』:  

谢谢junchen2 :)
用了你给的sed,运行确实没有问题
下面是最终的代码,
----------------------
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /a /b /s *.shtml') do (
echo %%i
sed -i "s/\(<p>*\)[\r\n]<\/p>/\1\n<\/p>/g" "%%i"
sed -i "s/\(<a href=['|\x22]\?\)\([^.>]*\)/\1.\2/g" "%%i"
time/t
)
endlocal
-----------------------

2008-1-1 19:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: