通过终端在文件中查找英文单词

通过终端在文件中查找英文单词

如何通过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

相关内容