Shell 拼写检查与词典操作,大多数Linux发行版都含有一份词典文件。然而,我发现几乎没人在意过这个文件,拼写错误仍是满天飞。还有一个叫作aspell
的命令行实用工具,其作用是进行拼写检查。让我们通过几个脚本来看看如何使用词典文件和拼写检查工具。
实战演练
目录/usr/share/dict/中包含了一些词典文件。所谓“词典文件”就是包含了单词列表的文本文件。我们可以利用它来检查某个单词是否在词典之中。
$ ls /usr/share/dict/
american-english british-english
为了检查给定的单词是否为词典单词,可以使用下面的脚本:
#!/bin/bash
#文件名: checkword.sh
word=1
grep "^1" /usr/share/dict/british-english -q
if [? -eq 0 ]; then
echo word is a dictionary word;
else
echoword is not a dictionary word;
fi
这个脚本的用法如下:
$ ./checkword.sh ful
ful is not a dictionary word
$ ./checkword.sh fool
fool is a dictionary word
工作原理
在grep
中,^
标记着单词的开始,$
标记着单词的结束1,-q
选项 禁止grep
产生任何输出。
1
^
匹配的是行首位置,$
匹配的是行尾位置。因为词典文件中每行只有一个单词,故使用正则表达式^1
匹配行中出现的完整单词。在该例中,从效果上来看,^
和$
恰好分别对应了单词的起止位置,但要注意这两者并非单词分界符。
作为另一种选择,我们也可以用拼写检查命令aspell
来核查某个单词是否在词典中:
#!/bin/bash
#文件名: aspellcheck.sh
word=1
output=`echo \"word\" | aspell list`
if [ -z output ]; then
echoword is a dictionary word;
else
echo $word is not a dictionary word;
fi
当给定的输入不是一个词典单词时,aspell list
命令会生成输出,否则不产生任何输出。-z
用于确认$output
是否为空。
look
命令可以显示出以特定字符串起始的行。你可以用它在日志文件中查找以特定日期为首的记录,或是在词典中查找以特定字符串开头的单词。look
默认会搜索/usr/share/dict/words,你也可以给出文件供其搜索:
$ look word
或者使用
$ grep "^word" filepath
例如:
$ look android
android
android's
androids
在/var/log/syslog中找出以特定日期起始的日志记录:
$look 'Aug 30' /var/log/syslog