当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]如何遍历子目录并把列出所有的文件名传递给一个sed脚本
帖子发表于 : 2006-12-19 15:27 

注册: 2006-08-11 14:01
帖子: 14
送出感谢: 0 次
接收感谢: 0 次
找到个sed的html2txt的脚本,因为要转换的html文件分散放在嵌套的子目录下面,
想如何能遍历目录的同时把遇到的每个文件转换成txt?

sed脚本的代码

代码:
#!/usr/bin/sed -nf
#
# Usage:  ./html2txt.sed file.html > file.txt
#                  OR
#         cat file.html | ./html2txt.sed > file.txt
#
# Bugs: Anand Avati <avati@hardcodecafe.com>
#


#/<[^>]*$/b SearchTagEnd
#b ParseHTML
#:SearchTagEnd
#N
#/<[^>]*$/b SearchTagEnd


# convert entire file/stdin into single pattern space
:GetLine
/^[ \t\n]*$/d
N
$b ParseHTML
b GetLine


# start parsing tags
:ParseHTML

# convert whitespace groups into single ' '
s/[ \t\n][ \t\n]*/ /g

# explicit space
s/&nbsp;/ /g

# fancy stuph
s/&copy;/(c)/g
s/&raquo;/>>/g
s/&middot;/*/g

# standard tags
s/< *[pP] *>/\n/g
s/< *\/[pP] *>/\n/g
s/< *[bB][rR] *>/\n/g

# parse table related tags
# <table>   =>  \n
s/< *[tT][aA][bB][lL][eE] *>/\n/g
s/< *[tT][rR] *>//g
s/< *\/[tT][rR] *>/\n/g
s/< *[tT][dD] *>//g
s/< *\/[tT][dD] *>//g

# <input type="radio" ..>    =>   ( )
s/< *[iI][nN][pP][uU][tT] [^>]*[tT][yY][pP][eE] *= *["]*[rR][aA][dD][iI][oO][^>]*>/( )/g

# <img src="/imag.jpg">   =>  [IMG:/imag.jpg]
#s/< *[iI][mM][gG] *[^>]*[sS][rR][cC] *= *["]*\([^" ]*\)["]*[^>]*>/[IMG:\1]\n/g
s/< *[iI][mM][gG] *[^>]*[sS][rR][cC] *= *["]*\([^" ]*\)["]*[^>]*>//g


#  <script> ... </script> => *nothing*
:ScriptTagUp
/< *[sS][cC][rR][iI][pP][tT].*\/ *[sS][cC][rR][iI][pP][tT] *>.*< *[sS][cC][rR][iI][pP][tT].*\/ *[sS][cC][rR][iI][pP][tT] *>/!b ScriptTagClean
s#\(< *[sS][cC][rR][iI][pP][tT].*/ *[sS][cC][rR][iI][pP][tT] *>.*\)\(< *[sS][cC][rR][iI][pP][tT].*/ *[sS][cC][rR][iI][pP][tT] *>\)#\1#g
b ScriptTagUp
:ScriptTagClean
s#< *[sS][cC][rR][iI][pP][tT].*/ *[sS][cC][rR][iI][pP][tT] *>##g

#  <form ..> ... </form>  => *nothing*
#:FormTagUp
#/< *[fF][oO][rR][mM].*\/ *[fF][oO][rR][mM] *>.*< *[fF][oO][rR][mM].*\/ *[fF][oO][rR][mM] *>/!b FormTagClean
#s#\(< *[fF][oO][rR][mM].*/[fF][oO][rR][mM] *>.*\)\(< *[fF][oO][rR][mM].*/[fF][oO][rR][mM] *>\)#\1#g
#b FormTagUp
#:FormTagClean
#s#< *[fF][oO][rR][mM].*/ *[fF][oO][rR][mM] *>##g

# for now
s/<[^>]*>//g

# we do this in the end to avoid adding confusion to the above
# because > and < can be interpreted as tags

# explicit >
s/&gt;/>/g
# explicit <
s/&lt;/</g

:Poo
p


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-12-19 16:48 

注册: 2006-07-09 12:22
帖子: 1331
地址: 南京
送出感谢: 0 次
接收感谢: 1
代码:
array_html=(`ls -R directory | grep ".*\.html"`); \
for i in ${array_html[*]}; \
do path_html=`find directory -name $i`; \
/path/to/html2txt $i > ${path_html%/*}/${i%.*}.txt; \
done

又改了一下,生成的*.txt文件与*.html文件应该在同一个目录下。


最后由 aBiNg 编辑于 2006-12-19 17:12,总共编辑了 2 次

页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-12-19 17:05 

注册: 2006-08-11 14:01
帖子: 14
送出感谢: 0 次
接收感谢: 0 次
多谢楼上,去看看 :)


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-12-19 17:38 

注册: 2006-08-11 14:01
帖子: 14
送出感谢: 0 次
接收感谢: 0 次
强人呀:D

但是有点小问题,在cygwin下,遇到中文文件名说找不到文件。

单独用那个sed脚本 “中文文件名”可以。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2006-12-19 17:51 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
太固执了吧。为什么一定要单独的sed脚本搞定一个问题。和bash组合一下,不是更加方便。


_________________
● 鸣学


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2006-12-19 18:02 

注册: 2006-08-11 14:01
帖子: 14
送出感谢: 0 次
接收感谢: 0 次
俺是bash菜鸟,能详细说说么?

eexpress 写道:
太固执了吧。为什么一定要单独的sed脚本搞定一个问题。和bash组合一下,不是更加方便。


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2006-12-19 21:37 

注册: 2006-07-09 12:22
帖子: 1331
地址: 南京
送出感谢: 0 次
接收感谢: 1
hyfans 写道:
但是有点小问题,在cygwin下,遇到中文文件名说找不到文件。

单独用那个sed脚本 “中文文件名”可以。

如果*.html名称中有空格,是有问题的;得先将文件名中的空格处理掉!


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2006-12-19 21:57 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
find . -iname "*.html" -exec html2txt {} \;
只是看你的html2txt脚本支持这样传递文件名不。修改下,应该总会可以的。
html2txt如果是纯sed脚本。
find . -iname "*.html" -exec sed -e html2txt {} \;试试。


_________________
● 鸣学


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2006-12-19 22:19 

注册: 2006-07-09 12:22
帖子: 1331
地址: 南京
送出感谢: 0 次
接收感谢: 1
eexpress 写道:
find . -iname "*.html" -exec html2txt {} \;
只是看你的html2txt脚本支持这样传递文件名不。修改下,应该总会可以的。
html2txt如果是纯sed脚本。
find . -iname "*.html" -exec sed -e html2txt {} \;试试。

ee;你这个语句用得也太离谱了吧。。。 :roll:
:lol:


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2006-12-20 1:42 

注册: 2006-08-11 14:01
帖子: 14
送出感谢: 0 次
接收感谢: 0 次
helo_aBiNg 写道:
hyfans 写道:
但是有点小问题,在cygwin下,遇到中文文件名说找不到文件。

单独用那个sed脚本 “中文文件名”可以。

如果*.html名称中有空格,是有问题的;得先将文件名中的空格处理掉!


我在想有没有办法让脚本执行的时候自动给每个文件名两边加上""呢?

或者像下面eexpress
说得那么做试试看。


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2006-12-20 1:52 

注册: 2006-08-11 14:01
帖子: 14
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
find . -iname "*.html" -exec html2txt {} \;
只是看你的html2txt脚本支持这样传递文件名不。修改下,应该总会可以的。
html2txt如果是纯sed脚本。
find . -iname "*.html" -exec sed -e html2txt {} \;试试。


有效果:

第一个,不过只是列出html文件的内容,没有进行转换。

第2个,sed: -e expression #1, char 2: extra characters after command


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2006-12-20 9:24 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
只是看如何把sed -e html2txt包起来而已,用个bash包起来肯定可以。我是随手写的。因为sed调用没用过。


_________________
● 鸣学


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译