如何通过linux命令行查找并打印出文件中包含的英文单词?
答案1
GNU grep 有以下选项:
grep --only-matching --ignore-case --fixed-strings --file /usr/share/dict/british-english-insane /path/to/file.txt
这输出每行找到一个字符串。这/usr/share/dict/british-english-insane
是 Debian 软件包提供的单词表wbritish-insane
。
答案2
他,有趣!
file=/usr/share/licenses/common/GPL3/license.txt
dict=/usr/share/dict/cracklib-small
while read word; do
grep >/dev/null -i "\<$word\>" $file &&
printf 'Word "%s" found in GPLv3...\n' $word
done < $dict
输出 :
Word a found in GPLv3...
Word ability found in GPLv3...
Word about found in GPLv3...
(...)
软件包中附带有cracklib-small文件cracklib
http://sourceforge.net/projects/cracklib
答案3
grep
基于的解决方案通常会非常慢,尤其是对于大型单词列表。
您可以利用单词列表已经排序的事实(但是在我的系统上,似乎至少英式英语已经在 POSIX/C 语言环境中排序,即使它是 UTF-8 编码的):
tr -cs "[:alpha:]'" '[\n*]' < /etc/passwd |
LC_ALL=C sort -u |
LC_ALL=C comm -12 - /usr/share/dict/british-english-insane
如果您想以不区分大小写的方式查找单词,您可能还需要预先将所有内容转换为小写或大写。
答案4
file=/usr/lib/python2.6/LICENSE.txt
dict=/usr/share/dict/british-english-huge # or any suitable list
sort "$dict" \
<(sed "s/[].,\"?!;:#$%&()*+<>=@\^_{}|~[]\+/\n/g # keep ' for now
s|[-/[[:digit:][:blank:][:cntrl:]]\+|\n|g
s/\<'\+/\n/; s/'\>\+/\n/ # remove '
" <(<"$file" tr '[:upper:]' '[:lower:]') ) |
uniq -c | awk '$1 > +1 {print $2}'
及时找到 382 个单词(不区分大小写):
real 0m1.723s
user 0m1.872s
sys 0m0.048s