![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-11 02:39 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » [已解决]请教sed提取文档两关键词间的内容 |
| 可打印版本 1,454 / 13 |
| 第1楼 jesqiu | 发表于 2008-12-26 16:08 |
| 新手上路 发帖 15 积分 19 | |
|
[已解决]请教sed提取文档两关键词间的内容 针对网页html代码,提取中间的内容。测试数据文件见附件(重复部分只是测试用,为了说明同个文档内容,两个关键词包括起来的内容多处出现。实际中是不同的内容,当然两个关键词是相同的)
我想提取网页中所有下面内容,规律就是<!--隐藏2-->上面两行开始, 和<!--复制帖子加链接------>中间的内容。因为html代码不好处理,也可以只提取<!--隐藏2-->开始内容,前面的我再处理加进去。 一个文档内提取两关键词中间内容我知道在sed中是: sed -n "/pattern1/,/pattern2/p" test.dat>result 但是,如果是pattern1,和pattern2在文档中多处出现的话,提取不成功?或者提取的结果不对。麻烦各位老大看看。。。。新手学sed,先行谢过了:) ————————————————————————————————— 转移自 DOS疑难解答 & 问题讨论 (解答室) 明显发错版块,因属论坛新手,故暂不予以处罚,望今后一起注意。 ——管理员 ————————————————————————————————— [ Last edited by jesqiu on 2009-1-5 at 16:37 ] |
|
| 第2楼 jesqiu | 发表于 2008-12-26 16:37 |
| 新手上路 发帖 15 积分 19 | |
|
感觉有点是因为<>这些符号处理有问题,还有就是sed的正则表达式的最大匹配和最小匹配。
试过提取<script language=JavaScript>......</script>,提取出来的结果是第一个<script...到最后一个</script>。所以,我很想搞明白的就是,多个匹配的内容,怎么精确匹配出来? 还有就是上面要提取的内容,<,=,-,!,>这些符号搞到我头都大了,有些加\,有些不加也可以。。。真晕了 再测试了下,貌似sed对中文支持不好:( script可以找到匹配的,"隐藏"就输出空了 [ Last edited by jesqiu on 2008-12-26 at 17:20 ] |
|
| 第3楼 jesqiu | 发表于 2008-12-26 18:29 |
| 新手上路 发帖 15 积分 19 | |
|
天,怎么会发到DOS版。。。orz。。。头晕了
多谢管理员。。。不好意思。。。 |
|
| 第4楼 jesqiu | 发表于 2008-12-29 11:32 |
| 新手上路 发帖 15 积分 19 | |
|
有人愿意给点建议吗?想了几天确实没想到。。指点一二都好啊
|
|
| 第5楼 ily2013 | 发表于 2008-12-29 19:43 |
| 中级用户 发帖 83 积分 247 | |
|
说实话你这个贴子发出来我就看了,不过贴的例子看得人眼都花了,今天我又看了看,因为我对sed也比较有兴趣,如果你的意思是只匹配第一次出现的pattern1/,/pattern2,可以用个笨办法,就是先删除pattern2,$在来一次pattern1/,/pattern2就解决问题了,你说的特殊字符加不加斜杠的问题,如果你不放心可以在前面加斜杠,其实pattern1/,/pattern2表达式是不需要把该行所有内容都写到表达式的,/隐藏2/,/复制帖子加链接/也可以的,具体代码我就不贴了,还是自己试验能学到东西!
|
|
| 第6楼 metoo | 发表于 2008-12-29 21:21 |
| 初级用户 发帖 93 积分 195 | |
|
这个需要用多行匹配模式,找点相关资料看看吧,算sed的中高级范畴了
|
|
| 第7楼 jesqiu | 发表于 2008-12-31 18:30 |
| 新手上路 发帖 15 积分 19 | |
Originally posted by ily2013 at 2008-12-29 19:43: 其实第二楼就有简略写我的目的了 ![]() 在发的时候就怀疑是不是人家看不明白了。本来想将数据作为附件上传的,不过论坛上传附件好像比较麻烦。试过了不太清楚。所以用code括起来 不是匹配第一次出现的。是匹配所有出现的模式。您说的pattern1/,/pattern2/不用写完整的,这个我知道,之前试过其他例子是可以的。但是这个数据不知道为什么不行?只是/隐藏2/这个不行(难道要用/隐藏/?不要数字2?这我还没测试过),如果用<script....> </script>这样的可以,就是得到最大匹配了(第一次出现<script...>到最后次出现</script>的所有内容,包括中间不需要的内容) 谢谢你:) [ Last edited by jesqiu on 2008-12-31 at 18:37 ] |
|
| 第8楼 jesqiu | 发表于 2008-12-31 18:32 |
| 新手上路 发帖 15 积分 19 | |
Originally posted by metoo at 2008-12-29 21:21: 这位兄台说的没错,我知道要这个,但是网上好像找到的都是手册类的文档,没有这方面的啊。而且,我用的是windows下的sed版本,和xUnix下的又不太一样。好多都是自己摸索啊。需要高人指点其中的关键之处。。。。 |
|
| 第9楼 HAT | 发表于 2009-01-01 01:13 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 8楼 |
|
| 第10楼 jesqiu | 发表于 2009-01-04 12:45 |
| 新手上路 发帖 15 积分 19 | |
Originally posted by HAT at 2009-1-1 01:13: 多谢多谢。我之前搜索标题带sed的文章,都看过了没发现有帮助的 多谢hat版主。先学习下先:) |
|
| 第11楼 jesqiu | 发表于 2009-01-04 18:59 |
| 新手上路 发帖 15 积分 19 | |
|
彻底无语了。。。
几天前测试无数遍不可以的,今天一试居然得到正确结果了。。。太离奇了 sed -n "/隐藏/,/复制帖子加链接/p" Page1.rtf>xol.txt 无语。好像什么也不多什么也不少。。。 |
|
| 第12楼 jesqiu | 发表于 2009-01-04 19:12 |
| 新手上路 发帖 15 积分 19 | |
|
sed -n "/^<script language=javascript>/,/^<\/script>/!p" Page1.rtf>Page1.rtf
重定向到源文件的结果就是,空文件。。。orz。。。刚才发现。windows下的gnu sed 要重定向到不同名文件(或后缀)。 但是之前是可以的啊。。晕了,不知道怎么回事? [ Last edited by jesqiu on 2009-1-4 at 19:18 ] |
|
| 第13楼 HAT | 发表于 2009-01-04 20:02 |
| 版主 发帖 5,017 积分 9,023 | |
|
Re 12楼 使用 -i 开关即可直接修改原文件,不必重定向。
|
|
| 第14楼 jesqiu | 发表于 2009-01-05 16:37 |
| 新手上路 发帖 15 积分 19 | |
|
谢谢hat大人
问题已经解决 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |