[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] [已解决]请问如何用 sed 从 html 中提取正文?

本帖最后由 CrLf 于 2011-11-13 21:43 编辑

拓者论坛的帖子为了防复制,在文本中掺杂了大量不可见的随机内容,现在我想用 sed 将帖子的源代码进行粗略处理转换成文本文档。
首先把一组 <> 之间的内容去掉,比如 123<br>abc 处理后为 123abc
再将行首的 .*> 和行尾的 <.* 分别去掉,比如 123>abc<456 的处理结果为 abc
帖子地址如下:
http://www.tuozhe8.com/thread-107762-1-1.html

现在要将这段代码(局部)
  1.       <DIV class=pcb>
  2.       <DIV class=t_fsz>
  3.       <TABLE cellSpacing=0 cellPadding=0>
  4.         <TBODY>
  5.         <TR>
  6.           <TD class=t_f id=postmessage_3305528>预算构成<FONT class=jammer>) X9 t5
  7.             D' P9 n. g0 R; q</FONT><BR>一份装潢预算表.至少要包含下列内容:<BR><SPAN
  8.             style="DISPLAY: none">$ q9 a; `; ~9 U4 n&nbsp;&nbsp;g</SPAN><FONT
  9.             class=jammer>) K&nbsp;&nbsp;e, \3 K2 P.
  10.             j</FONT><BR>(1)施工的项目及项目所在的部位,比如“顶”,要指明吊在什么部位。<BR><SPAN
  11.             style="DISPLAY: none">/ b' k1 [! m( @2 j6 }) |</SPAN><BR><SPAN
  12.             style="DISPLAY: none">. C, o/ l- U( Y. \4 R9 c4 {+
  13.             l</SPAN>(2)施工项目的规模。如“吊顶”一共要吊多少面积。家庭装潢陷阱。<BR><SPAN
  14.             style="DISPLAY: none">9 F&amp; ~" P, m; R* I, G2 T</SPAN><BR><SPAN
  15.             style="DISPLAY: none">0 H0 B* n$ T3
  16.             i</SPAN>(3)施工项目所用的材制,其中包括主要材料和辅助材料如“吊顶”,用的主材可以是PVC塑料扣板,也可以是铝合金扣板,辅材则分别是木龙骨和金属吊架及其他五金件如螺丝、钢钉等等。<FONT
  17.             class=jammer>4 B* k3 q' m( F</FONT><BR><BR><SPAN
  18.             style="DISPLAY: none">( c! y; }1 g/ z-
  19.             ^</SPAN>(4)施工项目的人工单价和材料单价。如“吊顶”,PVC扣板吊顶每平方米人工指导价为20元,材料单价则视所选用的木材和PVC扣板的牌号而定。<BR><SPAN
  20.             style="DISPLAY: none">' K! M, B4 C# w6 S7 o</SPAN><BR><SPAN
  21.             style="DISPLAY: none">) t( u2 k; A$ }(
  22.             o</SPAN>但是消费者切不要以为在预算单里包含这些内容就万事大吉。其实这只是一个预算的框架,真正的陷阱就在这框架里头。<FONT
  23.             class=jammer>9 C: r$ M* n" Z3 i5 J</FONT><BR><FONT
  24.             class=jammer>&nbsp;&nbsp;A2 y" X/ x5 N9 d* |0
  25.             L</FONT><BR>在预算尚未开始时,预算员常常会不经意地问道:“请问先生(小姐),您准备花多少钱装潢?”这可能是善意的,但也有一些就是在构筑陷阱。有的公司就是在了解到了客户的“预算”心理价位后,凄也要凑到这个数字,即使客户的实际工料并不到这个数字。更有甚者,采用“倒轧帐”的办法,制造一张“预算表”来蒙骗客户,而不是按实际的工作量来测定预算。<BR><SPAN
  26.             style="DISPLAY: none">+ [. f5 T&nbsp;&nbsp;F/ f( }</SPAN><FONT
  27.             class=jammer>1 ^# k. A: t'
  28.             j</FONT><BR>因此,对付这种“套底价”的陷阱,消费者最好的办-法是把自己的装潢设想告诉对方,然后就说:“请按这个要求造预算,价格高低我会控制的,请放心我的支付能力。”就是不把底交给对方,这样造出来的预算往往更容易控制。</TD></TR></TBODY></TABLE></DIV>
  29.       <DIV class=cm id=comment_3305528></DIV>
复制代码
处理成这样
  1. 预算构成
  2. 一份装潢预算表.至少要包含下列内容:
  3. (1)施工的项目及项目所在的部位,比如“顶”,要指明吊在什么部位。
  4. (2)施工项目的规模。如“吊顶”一共要吊多少面积。家庭装潢陷阱。
  5. (3)施工项目所用的材制,其中包括主要材料和辅助材料如“吊顶”,用的主材可以是PVC塑料扣板,也可以是铝合金扣板,辅材则分别是木龙骨和金属吊架及其他五金件如螺丝、钢钉等等。
  6. (4)施工项目的人工单价和材料单价。如“吊顶”,PVC扣板吊顶每平方米人工指导价为20元,材料单价则视所选用的木材和PVC扣板的牌号而定。
  7. 但是消费者切不要以为在预算单里包含这些内容就万事大吉。其实这只是一个预算的框架,真正的陷阱就在这框架里头。
  8. 在预算尚未开始时,预算员常常会不经意地问道:“请问先生(小姐),您准备花多少钱装潢?”这可能是善意的,但也有一些就是在构筑陷阱。有的公司就是在了解到了客户的“预算”心理价位后,凄也要凑到这个数字,即使客户的实际工料并不到这个数字。更有甚者,采用“倒轧帐”的办法,制造一张“预算表”来蒙骗客户,而不是按实际的工作量来测定预算。
  9. 因此,对付这种“套底价”的陷阱,消费者最好的办-法是把自己的装潢设想告诉对方,然后就说:“请按这个要求造预算,价格高低我会控制的,请放心我的支付能力。”就是不把底交给对方,这样造出来的预算往往更容易控制。
复制代码
但是不知道为什么我写的总报错呢?
  1. sed "s/\<[^>]*\>//g,s/.*\>//g,s/\<.*//g" %1 >1.txt
复制代码
另外顺便咨询一下,只打印从第一个含有 @ 的行到该行之后含有 # 的第一行该如何写呢?
比如
  1. 123
  2. @
  3. 【abc】
  4. #
  5. 456
  6. @
  7. def
  8. #
复制代码
这里只想输出第一对 @ 和 # 之间的 【abc】,但是不知道用 sed 该如何排除 def 呢?

zm,第一次看你提问啊。
  1. sed "s/\<[^>]*\>//g,s/.*\>//g,s/\<.*//g" %1 >1.txt
复制代码
这个代码中间不是用 ,  隔开语句的,而是用  ;
  1. sed "s/\<[^>]*\>//g;s/.*\>//g;s/\<.*//g" %1 >1.txt
复制代码
这个文本没什么规律,用sed处理起来恐怕有点困难。为什么你不把那个文章复制下来,这样也只是处理乱码而已,用sed就容易多了。
写了一个没什么技术含量的:
  1. sed -n  "H;${g;s/\n//g;s/<BR>/\n/g;p;}" test.txt | sed -n "{s/<SP[^<]*<\/SPAN>//g;s/<FO[^<]*<\/FONT>//g;s/<[^>]*>//g;p;}"
复制代码
  1. sed -n "/@/{p;:l;n;/#/{p;q;};p;bl}" test.txt
复制代码
1

评分人数

    • CrLf: 非常感谢技术 + 1
---学无止境---

TOP

可以考虑用HtoX32c配合sed
1

评分人数

    • CrLf: 感谢指点PB + 5
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# broly


    3Q挖瑞嘛去,原来是这样,也许我是 set /a 用多了...
    q 函数用得好,学习了!
   经过提示,弄了半天终于搞出来很丑陋的一行,基本满足需求,搞定。
  1. sed -n "/<TD class=t_f/,/<\/DIV>/H;/<DIV class=cm/{g;s/[^>]*>//;s/\n//g;s/<BR>/\\n/g;s/<[^\>]*>[^<]*<\/[^>]*>//g;s/\\n/\n/g;s/<\/DIV>//g;p;q}" %1 >"%~dpnx1.txt"
复制代码

TOP

返回列表