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

13
我有一个包含许多错误/错拼英语单词的大型文本文件。我想要在Linux中使用命令行拼写检查器编辑此文件。我找到了一些方法来做这件事,但根据我的搜索结果,它们都是以交互方式工作的。也就是说,当遇到错误/错拼的单词时,它们会向用户建议一些更正选项,并且用户应该选择其中之一。由于我的文件相当大且包含许多错误的单词,我不能用这种方式进行编辑。我正在寻找一种方法告诉拼写检查器使用第一个候选项替换所有错误的单词。是否有任何方法可以做到这一点?(a/hun)spell是否有适用的选项?
敬礼。

我可以在emacs中打开一个200MB的文件并进行拼写检查吗? - Hakim
我能否添加并使用自己的词典?我的意思是,是否可以使用用户开发的词典来为Emacs提供数据,并让Emacs也使用它? - Hakim
是的,您可以添加自己的字典。 - Basile Starynkevitch
我该如何添加自己的词典? - Hakim
以下是程序相关内容的翻译,仅返回已翻译的文本:我的回答是否解决了您的问题?有任何评论吗?我问这个是因为您没有接受任何答案。 - rsp
显示剩余4条评论
2个回答

8

如果你不需要替换所有错误的单词,而只是以非交互方式指出错误并打印建议,则可以使用ispell:

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

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接