使用命令行拼写检查文件,非交互式

时间:2012-09-17 04:37:53

标签: linux command-line spell-checking aspell hunspell

我有一个大文本文件,其中包含许多错误/拼写错误的英文单词。我正在寻找一种在Linux中使用命令行拼写检查器编辑此文件的方法。我找到了一些方法来做到这一点,但根据我的搜索,他们都以互动的方式工作。我的意思是,看到一个错误/拼写错误的单词,他们建议对用户进行一些更正,他/她应该选择其中一个。由于我的文件相当大,并且包含许多错误的单词,我无法以这种方式编辑它。我正在寻找一种方法来告诉拼写检查器使用第一个候选人替换所有错误的单词。 有没有办法做到这一点? (a / hun)法术有没有选择这样做?

问候。

2 个答案:

答案 0 :(得分:7)

您可以尝试使用以下命令:

yes 0 | script -c 'ispell text.txt' /dev/null

或:

yes 1 | script -c 'aspell check text.txt' /dev/null

但请记住,即使对于简单的事情,结果也可能很差:

$ echo The quik broown fox jmps over the laazy dogg > text.txt
$ yes 0 | script -c 'ispell text.txt' /dev/null
Script started, file is /dev/null
Script done, file is /dev/null
$ cat text.txt
The quick brown fox amps over the lazy dog

aspell似乎更糟糕,所以最好跟ispell一起使用。

您需要script命令,因为某些命令(如ispell)不希望编写脚本。通常,您会将yes 0的输出传递给命令,以模拟始终按“0”键,但有些命令检测到脚本并拒绝合作:

$ yes 0 | ispell text.txt
Can't deal with non-interactive use yet.

幸运的是,他们可能会被script命令所迷惑:

$ yes 0 | script -c 'ispell text.txt' /dev/null
Script started, file is /dev/null
Script done, file is /dev/null

您可以使用除/ dev / null之外的其他文件来记录输出:

$ yes 0 | script -c 'ispell text.txt' out.txt
Script started, file is out.txt
Script done, file is out.txt
$ cat out.txt 
Script started on Tue 02 Feb 2016 09:58:09 PM CET

Script done on Tue 02 Feb 2016 09:58:09 PM CET

答案 1 :(得分:5)

如果您不需要它来替换每个错误的单词,而只是以非交互方式指出错误和打印建议,您可以使用ispell:

$ ispell -a < file.txt | grep ^\& > errors.txt

遗憾的是,我不知道有任何标准的Linux实用程序可以从命令行执行您所请求的操作,尽管上面评论中的emacs建议已经过时了。