端末を介してファイルから英語の単語を検索する

端末を介してファイルから英語の単語を検索する

Linuxのコマンドラインでファイルに含まれる英語の単語を見つけて印刷する方法は?

答え1

GNU grepには次のオプションがあります。

grep --only-matching --ignore-case --fixed-strings --file /usr/share/dict/british-english-insane /path/to/file.txt

この出力は、1行に1つの文字列を検索します。/usr/share/dict/british-english-insaneDebianパッケージが提供する単語のリストです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ベースのソリューションは、特に大きな単語リストの場合、非常に遅いことがよくあります。

単語リストがすでにソートされているという事実を利用できます(しかし、私のシステムではUTF-8でエンコードされているにもかかわらず、少なくとも英国英語がPOSIX / Cロケールですでにソートされているようです)。

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

関連情報