1. 程式人生 > >Linux命令行翻譯工具

Linux命令行翻譯工具

$0 .sh 第一次 tex scrip linu then image mod

一、背景

經常在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命令行翻譯工具