免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 8828 | 回复: 34

抛砖引玉(a dictionary based for Terminal) [复制链接]

论坛徽章:
0
发表于 2011-04-16 16:55 |显示全部楼层
本帖最后由 lys5300 于 2011-05-26 22:59 编辑

那天看同学在终端上查单词觉得很好,像他资讯了一下就决定自己用bash写一个。 :em02
也厚着脸皮的发在这里来与大家交流一下。 :em06
抛砖引玉 :em11 。
再一次修改。现在可以说已经很全面了。
  1. #!/bin/bash
  2. #        This is a dictionary based for Termial.
  3. #        Its cache directory is in /tmp/dictionary/
  4. PS3='Your choice is : '
  5. word="$*"
  6. cache=~/.ydictionary/"$word"
  7. # read this word
  8. read_word()
  9. {
  10.         re_word="$1"
  11.         espeak -s 130 "$re_word" 1>/dev/null 2>&1
  12.         exit 0
  13. }
  14. # judge whether read this word.
  15. judge_read()
  16. {
  17.         readword="$1"
  18.         clew="Read it?(y/n)y:"
  19.         echo -ne "\033[35;1m$clew\033[00m"
  20.         read answer
  21.         : ${answer:=y}
  22.         if [ "$answer" = "y" ];then
  23.                 read_word "$readword"
  24.         else
  25.                 exit 5
  26.         fi
  27. }
  28. if [ $# -lt 1 ];then
  29.         echo
  30.         echo "usag: `basename $0` [word]"
  31.         echo
  32.         exit 1
  33. fi
  34. if [ -e "$cache" ];then
  35.         word2=$(cat "$cache")
  36.         echo -e "\033[34;1m$word2\033[0m"
  37.         echo
  38.         judge_read "$word"
  39.         exit 0
  40. elif [ ! -e ${cache%/*} ];then
  41.         mkdir -p ${cache%/*}
  42. fi

  43. #        抓取网页快照。
  44. wordf=$(wget -q "http://dict.cn/ws.php?utf8=true&q=$word" -O -)

  45. #        截取指定字符段。
  46. #        判断是否有单词匹配,如果没有给出相近的。否则就进行查询。
  47. if echo "$wordf"|grep 'sugg' 1>/dev/null 2>&1
  48. then
  49.         echo "You may want to search these words."
  50.         sword=$(echo "$wordf"|sed -e 's/<[\/]*sugg>//g'|grep '^[^<]'|tr ["\n"] ["\t"])
  51.         select guessw in $sword ;do
  52.                 if [ $guessw ];then
  53.                         echo -e "\033[36;1m$guessw\033[0m"
  54.                 ydic $guessw       
  55.                 exit 2
  56.                 else
  57.                 read -n 1 -p "Do you want to try again:(y/n)" choice
  58.                 echo
  59.                 if [ "$choice" = "y" ] || [ "$choice" = "Y" ];then
  60.                         echo 'Please input again:'
  61.                 else
  62.                         exit 3
  63.                 fi
  64.                 fi
  65.         done
  66. else
  67.         word1=$(echo "$wordf"|sed -e 's/<[\/]*\(def\|sent\|orig\|trans\)>//g' -e 's/&lt;em&gt;\(.*\)&lt;\/em&gt;/( \1 )/g' -e 's/\(&gt;\|&lt;\)/ /g'|grep '^[^<]')
  68.         echo "$word1">"$cache"
  69.         echo -e "\033[32;1m$word1\033[0m"
  70.         echo
  71.         judge_read "$word"
  72.         judge=$(cat "$cache")
  73.         if [ "$judge" == "Not Found" ];then
  74.                 rm -f "$cache"
  75.         fi
  76.         #cache如果大于一百兆,提示用户。进行释放。
  77.         total=$(du ${cache%/*}|cut -d/ -f 1)
  78.         if [ $total -gt 102400 ];then
  79.                 echo
  80.                 echo -e "\tThe dictionary cache is beyond 100M.Maybe you can release some space."
  81.         fi
  82. fi
  83.         exit 0
复制代码

论坛徽章:
0
发表于 2011-04-16 17:21 |显示全部楼层
你要考虑效率的话,别用shell了,也就一眨眼的时间,你还嫌慢?

其实不用中间文件也无所谓,直接对你wget到的信息进行处理就行了,或者干脆赋值给变量

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
发表于 2011-04-16 18:15 |显示全部楼层
搬砖

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-04-16 18:18 |显示全部楼层
wget 的-O参数后面接-
-O -
就是打到标准输出

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2011-04-16 18:18 |显示全部楼层
然后后面再加一个管道处理即可,这样就不用写临时文件

论坛徽章:
0
发表于 2011-04-16 19:50 |显示全部楼层
你要考虑效率的话,别用shell了,也就一眨眼的时间,你还嫌慢?

其实不用中间文件也无所谓,直接对你wge ...
xiaopan3322 发表于 2011-04-16 17:21


你用过我的脚本了吗?

呵呵,也许你眨眼的时间有时候忒长了点。(有时候)

论坛徽章:
0
发表于 2011-04-16 19:53 |显示全部楼层
然后后面再加一个管道处理即可,这样就不用写临时文件
cjaizss 发表于 2011-04-16 18:18



是诶,但是我发觉那样对结果就不好解析了。改天再试试吧,不断的将它完善。

不过我现在要去做体育试卷了。。。。。呜呜。。

论坛徽章:
0
发表于 2011-04-17 01:47 |显示全部楼层
你用过我的脚本了吗?

呵呵,也许你眨眼的时间有时候忒长了点。(有时候)
lys5300 发表于 2011-04-16 19:50



    真牛逼啊,这程序太强了,执行效率好高啊,运行的好快啊,快的连我眨眼的时间和其比起来都显得如此的漫长,佩服佩服啊,真是个大拿,让我等卢瑟情何以堪……哎……看来要回去好好学习下shell了……LZ让我对shell有了新的认识……

论坛徽章:
0
发表于 2011-04-17 07:30 |显示全部楼层
回复 8# xiaopan3322


   在此我不想和你做这种毫无意义的辩解,因为那样本身就违背了我将这个脚本发在这上面的初衷,你是善意也好,恶意也罢,都无所谓。对吧,因为你的回答对我没有任何的参考价值,Linux下的人都是热心与帮助别人的,而我从你的身上看到的却不是。你又叫我能奈你何呢?如果你不想看,觉得不好,那你大可以避而远之。我等亦乐此不疲的做这些事。

    第一次发贴就如是,实让人哀叹。希望你能忽略我的片面之言,如果你反其道而行之。那着实让人心寒,辛酸。  

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
发表于 2011-04-17 09:06 |显示全部楼层
回复 9# lys5300


   
这位兄弟,学习你的帖子!
xiaopan兄应该对你没有恶意,可能你有些敏感了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP