Procure palavra em inglês em um arquivo via terminal

6

Como encontrar e imprimir palavras em inglês contidas em um arquivo via linha de comando do linux?

    
por verdy 02.10.2012 / 03:03

4 respostas

9

O GNU grep tem as seguintes opções:

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

Isso gera strings encontradas uma por linha. Aqui /usr/share/dict/british-english-insane é uma lista de palavras fornecida pelo pacote Debian wbritish-insane .

    
por 02.10.2012 / 06:36
3

Ele é engraçado!

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

Saída:

Word a found in GPLv3...
Word ability found in GPLv3...
Word about found in GPLv3...
(...)

O arquivo cracklib-small vem com o pacote cracklib link

    
por 02.10.2012 / 03:21
2
As soluções baseadas em

grep geralmente serão bastante lentas, especialmente com grandes listas de palavras.

Você pode tirar proveito do fato de que as listas de palavras já estão classificadas (no entanto, no meu sistema, parece que pelo menos o Inglês-Britânico foi classificado no local POSIX / C mesmo sendo codificado em UTF-8): / p>

tr -cs "[:alpha:]'" '[\n*]' < /etc/passwd |
  LC_ALL=C sort -u |
  LC_ALL=C comm -12 - /usr/share/dict/british-english-insane

Você também pode querer converter tudo em letras minúsculas ou maiúsculas de antemão se quiser procurar palavras de maneira que não diferencie maiúsculas de minúsculas.

    
por 02.10.2012 / 14:21
1
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}' 

encontrou 382 palavras (insensível a maiúsculas) no tempo:

real   0m1.723s
user   0m1.872s
sys    0m0.048s
    
por 02.10.2012 / 13:06