码迷,mamicode.com
首页 > 系统相关 > 详细

Linux命令行翻译工具

时间:2018-10-17 14:44:13      阅读:593      评论:0      收藏:0      [点我收藏+]

标签:exit   src   hub   快速   water   amp   getopt   技术   dha   

一、背景

经常在linux命令行下有些单词不认识,复制出来通过翻译软件很不方便,如果有个命令行翻译就比较舒服了。通过下面shell脚本可以在/usr/bin/yd创建yd命令来进行快速命令行翻译。

二、代码

git地址

#!/bin/bash
# 
# 
CMD=/usr/bin/yd

cat >${CMD} <<EOF
#!/bin/bash
ARGS=1
E_BADARGS=1
TEM_FILE="/tmp/dict.tmp"
example_enable=false

if [ \$# -lt "\$ARGS" ]
 then
    echo "Usage:\$(basename \$0) word"
    exit \$E_BADARGS
fi

#处理参数
while getopts "a" arg
do
  case \$arg in
    a)
      example_enable=true
      shift
      ;;
    ?)
    example_enable=false
    echo "unkown argument"
  exit 1
  ;;
  esac
done

keyword="\$*"
keyword=\${keyword// /%20}

# 抓取页面,删除html代码,空行等,只留下想要的内容
curl -s ‘http://dict.youdao.com/search?q=‘\$keyword‘‘ | awk ‘BEGIN{j=0;i=0;} {if(/phrsListTab/){i++;} if(i==1){print \$0; if(/<\/ul>/){i=0;}} if(/collinsToggle/){ j++;} if
(j==1) {print \$0; if(/<\/ul>/){j=0;}}}‘ | sed ‘s/<[^>]*>//g‘ | sed ‘s/?//g‘| sed ‘s/→//g‘ | sed ‘s/^\s*//g‘ | sed ‘/^$/d‘> \$TEM_FILE
# 处理输出
is_head=true # 当前行是否属于“头部”
head="" # 头部内容
body="" # 主体内容
ln_item=0 # 每一条解释的行号
ln_eg=0 # 例句行号

while read line
do
    let ln_item++
    let ln_eg++
    num_flag=\$(echo "\$line" | awk ‘/[0-9]+\.\$/‘)
    if [ "\$num_flag" != "" ]; then ## 遇见‘数字+点‘开头的行
        is_head=false # 第一次遇见数字行  将头部标示设置为false
        ln_item=0
    fi

    eg_flag=\$(echo "\$line" | awk ‘/例:\$/‘) # 遇见‘例:‘开头的行
    if [ "\$eg_flag" != "" ]; then
        ln_eg=0
    fi

    if \$is_head ; then
        head="\$head \$line"
    else
        if [ \$ln_item == 0 ] ; then
            line="\033[32;1m\n\n\$line\033[0m" # 释义编号
        elif [ \$ln_item == 1 ] ; then
            line="\033[32;1m[\$line]\033[0m" # 词性
        elif [ \$ln_item == 2 ] ; then
            line="\033[1m\$line\033[0m" # 释义 
        elif [ \$ln_eg == 0 ] ; then
            line="\033[32;1m\n   \$line\033[0m" # 例:
        elif [ \$ln_eg == 1 ]; then
            line="\033[33m\$line\033[0m" # 例句 
        elif [ \$ln_eg == 2 ]; then
            line="\033[33m\$line\033[0m" # 例句释义 
        fi
        body="\$body \$line"
    fi
done < \$TEM_FILE
if \$example_enable
then
    echo -e "\033[31;1m\$head\033[0m \$body"
else
    echo -e "\033[31;1m\$head\033[0m"
fi
exit 0
EOF

chmod +x ${CMD}

三、测试

  • 安装
    直接下载shell脚本,bash运行脚本即可
    bash linux_fanyi.sh
  • 翻译单词
    技术分享图片

  • 批量翻译单词
    可以将单词放在一个文件中,去遍历翻译,例如这里翻译了下linux系统的用户名
    技术分享图片

Linux命令行翻译工具

标签:exit   src   hub   快速   water   amp   getopt   技术   dha   

原文地址:http://blog.51cto.com/kaliarch/2301105

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!