只从文件中获取英文单词

时间:2012-06-09 00:52:05

标签: regex shell unix

我在文件中有很多单词[MM]。

我跑了这个命令:

cat file.txt | tr " " "\n"| sort | uniq  > uniq.out

我发现有很多中文单词和一些字母和特殊字符

我希望得到所有只有英语的单词[A-Z] [a-z]

grep -E "[A-Za-z]" uniq.out | grep -Ev "[0-9]" | less

上述命令也匹配字母数字字。

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

使用

^[A-Za-z]+$

(你的正则表达式只是说它必须包含1个a-z字符才能算作匹配的行)

答案 1 :(得分:0)

为什么只运行一个命令才能运行四个命令?

英文是用拉丁文写的。因此,这将拉出所有独特的拉丁文字:

$ perl -CSD -nle '$seen{$1}++ || print $1 while /\b(\p{Latin}+)\b/g' input_file.utf8

但你会错过所有带撇号或连字符的单词。当然你也不想要那些吗?

要确切地知道他们是否是有效的英语单词,需要访问一本好的词典,以及拐点的规则。否则你会得到像“xyzzy”这样的误报。