功能 find an English word
用法 (例)wordhelp con v en t
( e.g. looking for the word "convenient")
Script s1
pat=$1;   
shift
grep "^$pat"  /usr/lib/dict/all  | mgrep $*
解釋 很多Unix 系統都有個spell的指令,這個指令一定會用到 一個字典,其中含有大部分的英文單字,我們可以運用 這個檔案來做很多跟字典有關的工作。 使用者可以嘗試找找這個檔案 /usr/lib/dict/all。
wordhelp 這個script 是筆者最常用的script,寫英文文章時幫助非常大。 我們對一個英文字的拼法不熟時,查一般的字典也無從下手, 可能要試很多次,將一部字典翻來覆去才能找到要查的字。 wordhelp 這個 script 可讓使用者輸入一個英文字的某些片段,就可以將含有 這些片段的英文字列出來,而同時含有這些片段的英文單字 屈指可數,很容易就可挑出自己想找的單字。

請注意,這個Script 出現了一個罕見的 shift 指令,這是 shell 裡一個重要的指令,可以將使用者在command line 下的參數做個變動, 將 $1 捨棄,而將後面的 $2, $3, $4 等往前移動,如此,在script 中就可以將原代表所有參數的變數符號"$*"用來代表 $2, $3, $4 等參數。

 
 
Homework: 設計一個可以幫助 word puzzle (填字遊戲) 的指令?

 

功能 grep with multiple patterns
用法mgrep <pat1> <pat2> <pat3> ...
Script s2
if [ $# -ge 1 ] #檢查是否有輸入待比對的字串
then  
arg=`echo $* | sed -e 's/ / | grep /g'` #sed 將所有相鄰輸入字串中間插入 '| grep '
arg="cat | grep $arg" #變數arg放入一個如此字串 'cat | grep pat1 | grep pat2 | grep pat3 ....'
eval $arg #將變數 arg 之內容當成指令執行
fi  

Alternative by fgrep
if [ $# -ge 1 ]
then
arg=`echo $* | sed -e 's/ / | /g'`
arg="cat | fgrep \"$arg\""
eval $arg
fi
解釋 Script s2 會將STDIN含有數個指定字串的「行」抓出來, 使用者可輕易更改這個script,讓他可以grep 更多的pattern。 對於常常使用的人,可省下許多時間。下面的 spellcorrect 會用到 這個關鍵的 script。

 

功能 Spelling Corrector
用法spellcorrect <filename>
Script s3
   1 spell $1 > 1.o
   2 comm -13 1.o excludedwords > 2.o
   3 sed 's/..*/1,$s\/&\/&\/g' 2.o > script
   4 vi script
   5 ex $1 < script
1   將輸入的檔案利用spell找出字典沒有的字
2   利用 comm -13 將使用者的專有字剔除
3   將剩下的錯字製造出一個編輯指令檔, 對應每一個錯字,有一行 1,$s/oldword/oldword/ 編輯指令
4   叫出vi (可用其他編輯器取代) 來讓使用者將該編輯指令檔編輯成一個可以更正錯字的編輯指令檔, 對應每一個錯字,有一行 1,$s/oldword/newword/ 編輯指令
  5   叫出ex 編輯器利用此編輯指令檔將原文裡的錯字改掉
解釋
在Unix 上寫英文文章時,這個script 可以幫忙更改錯字, 省下很多麻煩的編輯動作,非常有用。
問題利用這個script時,有時候要注意編輯指令檔的正確性, 萬一發生錯誤時,可能會破壞原檔案,改到不該改的字。 例如,如果文章裡有個 "th"的字被挑出來,使用者如果 將這個指令 1,$s/th/th/g 改成 1,$s/th/the/g 的話,後果將會很嚴重。

此外,ex 是一個 atomic 的程式, (do all or do nothing), 如果其中有一個編輯指令失敗,最後的 w 將不會作用,導致 執行失敗。 例如,下面的編輯指令會失敗。


1,$s/systen/system/g

1,$s/systens/systems/g
w
讀者應該在editor 內將編輯指令檔改成下面這樣才行:

1,$s/systen/system/g
w

Web Page Copyright: 國立政治大學資訊科學系 連耀南 lien@cherry.cs.nccu.edu.tw  spell.htm,  Fri Feb 28 16:24:54 CST 2014