标题: [问题求助] [已解决]请问如何用 sed 从 html 中提取正文? [打印本页]
作者: CrLf 时间: 2011-10-28 23:54 标题: [已解决]请问如何用 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
现在要将这段代码(局部)- <DIV class=pcb>
- <DIV class=t_fsz>
- <TABLE cellSpacing=0 cellPadding=0>
- <TBODY>
- <TR>
- <TD class=t_f id=postmessage_3305528>预算构成<FONT class=jammer>) X9 t5
- D' P9 n. g0 R; q</FONT><BR>一份装潢预算表.至少要包含下列内容:<BR><SPAN
- style="DISPLAY: none">$ q9 a; `; ~9 U4 n g</SPAN><FONT
- class=jammer>) K e, \3 K2 P.
- j</FONT><BR>(1)施工的项目及项目所在的部位,比如“顶”,要指明吊在什么部位。<BR><SPAN
- style="DISPLAY: none">/ b' k1 [! m( @2 j6 }) |</SPAN><BR><SPAN
- style="DISPLAY: none">. C, o/ l- U( Y. \4 R9 c4 {+
- l</SPAN>(2)施工项目的规模。如“吊顶”一共要吊多少面积。家庭装潢陷阱。<BR><SPAN
- style="DISPLAY: none">9 F& ~" P, m; R* I, G2 T</SPAN><BR><SPAN
- style="DISPLAY: none">0 H0 B* n$ T3
- i</SPAN>(3)施工项目所用的材制,其中包括主要材料和辅助材料如“吊顶”,用的主材可以是PVC塑料扣板,也可以是铝合金扣板,辅材则分别是木龙骨和金属吊架及其他五金件如螺丝、钢钉等等。<FONT
- class=jammer>4 B* k3 q' m( F</FONT><BR><BR><SPAN
- style="DISPLAY: none">( c! y; }1 g/ z-
- ^</SPAN>(4)施工项目的人工单价和材料单价。如“吊顶”,PVC扣板吊顶每平方米人工指导价为20元,材料单价则视所选用的木材和PVC扣板的牌号而定。<BR><SPAN
- style="DISPLAY: none">' K! M, B4 C# w6 S7 o</SPAN><BR><SPAN
- style="DISPLAY: none">) t( u2 k; A$ }(
- o</SPAN>但是消费者切不要以为在预算单里包含这些内容就万事大吉。其实这只是一个预算的框架,真正的陷阱就在这框架里头。<FONT
- class=jammer>9 C: r$ M* n" Z3 i5 J</FONT><BR><FONT
- class=jammer> A2 y" X/ x5 N9 d* |0
- L</FONT><BR>在预算尚未开始时,预算员常常会不经意地问道:“请问先生(小姐),您准备花多少钱装潢?”这可能是善意的,但也有一些就是在构筑陷阱。有的公司就是在了解到了客户的“预算”心理价位后,凄也要凑到这个数字,即使客户的实际工料并不到这个数字。更有甚者,采用“倒轧帐”的办法,制造一张“预算表”来蒙骗客户,而不是按实际的工作量来测定预算。<BR><SPAN
- style="DISPLAY: none">+ [. f5 T F/ f( }</SPAN><FONT
- class=jammer>1 ^# k. A: t'
- j</FONT><BR>因此,对付这种“套底价”的陷阱,消费者最好的办-法是把自己的装潢设想告诉对方,然后就说:“请按这个要求造预算,价格高低我会控制的,请放心我的支付能力。”就是不把底交给对方,这样造出来的预算往往更容易控制。</TD></TR></TBODY></TABLE></DIV>
- <DIV class=cm id=comment_3305528></DIV>
复制代码
处理成这样- 预算构成
- 一份装潢预算表.至少要包含下列内容:
-
- (1)施工的项目及项目所在的部位,比如“顶”,要指明吊在什么部位。
-
- (2)施工项目的规模。如“吊顶”一共要吊多少面积。家庭装潢陷阱。
-
- (3)施工项目所用的材制,其中包括主要材料和辅助材料如“吊顶”,用的主材可以是PVC塑料扣板,也可以是铝合金扣板,辅材则分别是木龙骨和金属吊架及其他五金件如螺丝、钢钉等等。
-
- (4)施工项目的人工单价和材料单价。如“吊顶”,PVC扣板吊顶每平方米人工指导价为20元,材料单价则视所选用的木材和PVC扣板的牌号而定。
-
- 但是消费者切不要以为在预算单里包含这些内容就万事大吉。其实这只是一个预算的框架,真正的陷阱就在这框架里头。
-
- 在预算尚未开始时,预算员常常会不经意地问道:“请问先生(小姐),您准备花多少钱装潢?”这可能是善意的,但也有一些就是在构筑陷阱。有的公司就是在了解到了客户的“预算”心理价位后,凄也要凑到这个数字,即使客户的实际工料并不到这个数字。更有甚者,采用“倒轧帐”的办法,制造一张“预算表”来蒙骗客户,而不是按实际的工作量来测定预算。
-
- 因此,对付这种“套底价”的陷阱,消费者最好的办-法是把自己的装潢设想告诉对方,然后就说:“请按这个要求造预算,价格高低我会控制的,请放心我的支付能力。”就是不把底交给对方,这样造出来的预算往往更容易控制。
复制代码
但是不知道为什么我写的总报错呢?- sed "s/\<[^>]*\>//g,s/.*\>//g,s/\<.*//g" %1 >1.txt
复制代码
另外顺便咨询一下,只打印从第一个含有 @ 的行到该行之后含有 # 的第一行该如何写呢?
比如- 123
- @
- 【abc】
- #
- 456
- @
- def
- #
复制代码
这里只想输出第一对 @ 和 # 之间的 【abc】,但是不知道用 sed 该如何排除 def 呢?
作者: broly 时间: 2011-10-29 01:41
zm,第一次看你提问啊。- sed "s/\<[^>]*\>//g,s/.*\>//g,s/\<.*//g" %1 >1.txt
复制代码
这个代码中间不是用 , 隔开语句的,而是用 ;- sed "s/\<[^>]*\>//g;s/.*\>//g;s/\<.*//g" %1 >1.txt
复制代码
这个文本没什么规律,用sed处理起来恐怕有点困难。为什么你不把那个文章复制下来,这样也只是处理乱码而已,用sed就容易多了。
写了一个没什么技术含量的:- 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;}"
复制代码
- sed -n "/@/{p;:l;n;/#/{p;q;};p;bl}" test.txt
复制代码
作者: Batcher 时间: 2011-10-29 10:52
可以考虑用HtoX32c配合sed
作者: CrLf 时间: 2011-10-29 11:34
回复 2# broly
3Q挖瑞嘛去,原来是这样,也许我是 set /a 用多了...
q 函数用得好,学习了!
经过提示,弄了半天终于搞出来很丑陋的一行,基本满足需求,搞定。- 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"
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |