当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 21 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 终端下的英汉字典
帖子发表于 : 2010-12-17 13:12 
头像

注册: 2008-01-31 11:57
帖子: 68
送出感谢: 0 次
接收感谢: 0 次
这个是我编写的一个基于shell的英汉网络字典,网络源是来自baidu的(没办法,我试过iciba,可惜速度和简洁程度比不上百度,罪过罪过)

感觉还是很好用,不用再开启星际或词霸了,速度快好多。

注:这里分成两个脚本,一个循环查询的,适合大家在读英文的时候时不时查下单词用,叫idic
另一个是只查询一次就退出的,适合临时查下单词,叫dic

大家如果有什么不爽的地方,既可以自己改,也可以在issue里面直接留言。

希望大家能喜欢,这个东西也能帮助大家。 :em02

这个是项目地址:http://code.google.com/p/dictionary4linux/

由于google code有时候会被重set,所以下面我就直接贴出代码:
利用notify-send输出结果
代码:
#!/bin/bash
ARGS=1
E_BADARGS=65

#prepare the cache dir to save the translate offline
if [ ! -e ~/dictionary ];
then
echo "make dir...."
mkdir ~/dictionary
fi

#check the arg that user inputed
if [ $# -ne "$ARGS" ];
then
echo "Usage:`basename $0` word"
exit $E_BADARGS
fi

if [ ! -f ~/dictionary/$1 ];
then
#read the translate from dict of baidu.com
#PS: Why to use Baidu? The answer is simple, fast.
w3m -no-cookie -dump 'http://dict.baidu.com/s?wd='$1'&f=3'  \
                  | sed '/以下结果来自互联网网络释义/,$d'| sed '1,15d' | tac \
                           | sed '1,2d' | tac |sed -r '/^[0-9]+\./N;s/\n//' > ~/dictionary/$1
fi

msg=`cat ~/dictionary/$1`
if [ "$msg" = "" ];
then
   msg="您所查询的$1无法找到解释。"
fi
notify-send "$1" "$msg" >/dev/null 2>&1
if [ $? -eq 0 ];
then
   exit 0
else

   echo
   echo -e "--------------------\033[1;40;33m $1 \033[0m--------------------"
   echo "$msg"
   exit 0
fi




直接在终端输出结果
代码:
#!/bin/bash
ARGS=1
E_BADARGS=65

#prepare the cache dir to save the translate offline
if [ ! -e ~/dictionary ];
then
echo "make dir...."
mkdir ~/dictionary
fi

#check the arg that user inputed
if [ $# -ne "$ARGS" ];
then
echo "Usage:`basename $0` word"
exit $E_BADARGS
fi

if [ ! -f ~/dictionary/$1 ];
then
#read the translate from dict of baidu.com
#PS: Why to use Baidu? The answer is simple, fast.
w3m -no-cookie -dump 'http://dict.baidu.com/s?wd='$1'&f=3'  \
                  | sed '/以下结果来自互联网网络释义/,$d'| sed '1,15d' | tac \
                           | sed '1,2d' | tac |sed -r '/^[0-9]+\./N;s/\n//' > ~/dictionary/$1
fi

msg=`cat ~/dictionary/$1`
if [ "$msg" = "" ];
then
   msg="您所查询的$1无法找到解释。"
fi

echo
echo -e "--------------------\033[1;40;33m $1 \033[0m--------------------"
echo "$msg"
exit 0
                        



循环查询单词
代码:

#!/bin/sh
if [ ! -e ~/dictionary ];
then
mkdir ~/dictionary
fi

clear

echo -e "\033[1;32;33mWelcome to use online dictionary!\033[0m"
while [ 1 = 1 ]
do
echo -en "\033[0;32;33mPlease enter the word(q:quit):\033[0m"
read word
if [ "$word" = "q" ]
then
   echo "Bye"
   exit 0
fi

if [ -z "$word" ]
then
continue
fi

if [ ! -f ~/dictionary/$word ];
then
w3m -no-cookie -dump 'http://dict.baidu.com/s?wd='$word'&f=3'  \
         | sed '/以下结果来自互联网网络释义/,$d'| sed '1,15d' | tac \
         | sed '1,2d' | tac |sed -r '/^[0-9]+\./N;s/\n//' > ~/dictionary/$word
fi
clear
echo
echo -e "--------------------\033[1;40;33m $word \033[0m--------------------"
cat ~/dictionary/$word
done
exit 0

新手指引:将代码复制一个文件,比如dic,然后chmod u+x dic,接下来
代码:
sudo cp dic /usr/bin/
,这样就可以直接在命令行或者快速运行里面直接运行dic了


附件:
文件注释: 运行截图
snapshot1.png
snapshot1.png [ 744.71 KiB | 被浏览 2560 次 ]



最后由 steven0lisa 编辑于 2011-05-29 1:56,总共编辑了 4 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 13:14 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
sdcv用notify显示的,如何。比较下。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 13:16 
头像

注册: 2005-08-14 19:53
帖子: 4002
送出感谢: 1
接收感谢: 2
支持一下。咋木有音标?希望弄一下输出便于使用notify-send来显示


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 14:04 
头像

注册: 2008-01-31 11:57
帖子: 68
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
sdcv用notify显示的,如何。比较下。

好好!
我去看看


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 14:08 
头像

注册: 2008-01-31 11:57
帖子: 68
送出感谢: 0 次
接收感谢: 0 次
jarryson 写道:
支持一下。咋木有音标?希望弄一下输出便于使用notify-send来显示

嗯。。我当时没有想那么多。。而且百度也没有给音标


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 14:30 
头像

注册: 2008-01-31 11:57
帖子: 68
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
sdcv用notify显示的,如何。比较下。

添加了


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 14:31 
头像

注册: 2008-01-31 11:57
帖子: 68
送出感谢: 0 次
接收感谢: 0 次
jarryson 写道:
支持一下。咋木有音标?希望弄一下输出便于使用notify-send来显示

不好意思。有音标。
这个我迟点加上去


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 14:41 
头像

注册: 2008-04-26 12:41
帖子: 11005
送出感谢: 11
接收感谢: 38
:em11


_________________
[新手必读]wubi安装常见问题(FAQ)
[分享]装双系统的同学必看——Windows与Linux系统共享交换分区的方法
kde下唯美的暗黑内透主题(无需编译)
无穷老机上的Trinity Desktop Environment


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 16:27 
头像

注册: 2005-08-14 19:53
帖子: 4002
送出感谢: 1
接收感谢: 2
咋又是需要w3m。。。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 16:32 
头像

注册: 2008-01-31 11:57
帖子: 68
送出感谢: 0 次
接收感谢: 0 次
jarryson 写道:
咋又是需要w3m。。。


嗯。。。 我利用它下载网页 :em06
不知道在下有没有不用w3m就可以下载网页的方案呢?


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 16:36 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
代码:
● cat bin/bot/sdcv.pl
#!/usr/bin/perl
use Getopt::Long;

# 参数:单行输出选择。屏幕提示输出选择。
GetOptions('1' => \$oneline, 'n'=>\$notify);

my $out,$in;
# 无参数时,使用剪贴板内容。
$in=$ARGV[0]; if(!$in){$in=`xsel -o`;} if(!$in){exit;}
open(SDCV,"sdcv -n $in|");
my $r;
while($l=<SDCV>){
if($l!~/^$/){$r=$l;chomp($r);$r=~s/-->//;}
else{$out="$r --> ";last;}
}
while($l=<SDCV>){
if($l=~/相关|^$/){
close(SDCV);
if($notify){`notify-send -u critical -i '/home/exp/媒体/图标●/128软件png/pidgin.png' 'sdcv翻译' "$out"`;}
else{print $out;}
exit;
}
chomp($l) if($oneline);
$out.=" ► $l";
}


_________________
● 鸣学


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 16:47 
头像

注册: 2008-01-31 11:57
帖子: 68
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
代码:
● cat bin/bot/sdcv.pl
#!/usr/bin/perl
use Getopt::Long;

# 参数:单行输出选择。屏幕提示输出选择。
GetOptions('1' => \$oneline, 'n'=>\$notify);

my $out,$in;
# 无参数时,使用剪贴板内容。
$in=$ARGV[0]; if(!$in){$in=`xsel -o`;} if(!$in){exit;}
open(SDCV,"sdcv -n $in|");
my $r;
while($l=<SDCV>){
if($l!~/^$/){$r=$l;chomp($r);$r=~s/-->//;}
else{$out="$r --> ";last;}
}
while($l=<SDCV>){
if($l=~/相关|^$/){
close(SDCV);
if($notify){`notify-send -u critical -i '/home/exp/媒体/图标●/128软件png/pidgin.png' 'sdcv翻译' "$out"`;}
else{print $out;}
exit;
}
chomp($l) if($oneline);
$out.=" ► $l";
}



非perl派,看不懂。。。
运行没效果。


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 16:51 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
你没安装过sdcv吧。stardict的cli版本。


_________________
● 鸣学


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-17 17:03 
头像

注册: 2008-01-31 11:57
帖子: 68
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
你没安装过sdcv吧。stardict的cli版本。


没有装过。 不过你这样一说,我倒是有印象了。有空看看吧。呵呵


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 终端下的英汉字典
帖子发表于 : 2010-12-19 0:23 

注册: 2006-11-15 14:14
帖子: 614
送出感谢: 0 次
接收感谢: 1
if [ "$msg"="" ] 应该是 if [ "$msg" = "" ]
等号两边的空格被lz丢掉了。
我说怎么老是同样的结果:您所查询的$1无法找到解释。

还有循环查询当中的 带颜色的地方 echo后lz少了一个 -e

最后,感谢lz一下,挺好用的。

另外,如果能查汉语字词就好了。我看了一下,大概还要把汉字转成十六进制的那种编码才行,比如“我”得转成“%CE%D2”才行。不知道linux下有什么工具可以实现这种转化的?


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 21 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

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


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

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

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