Проверка правописания файла с помощью командной строки, неинтерактивно
У меня есть большой текстовый файл, содержащий много английских слов, написанных с ошибками / с неправильным написанием. Я ищу способ отредактировать этот файл с помощью средства проверки орфографии в командной строке в Linux. Я нашел несколько способов сделать это, но, согласно моим поискам, все они работают в интерактивном режиме. Я имею в виду, увидев пропущенное / плохо написанное слово, они предлагают пользователю некоторые исправления, и он / она должен выбрать одно из них. Поскольку мой файл довольно большой и содержит много неправильных слов, я не могу редактировать его таким образом. Я ищу способ сказать орфографии, которая заменяет все неправильные слова, используя первого кандидата. Есть какой-либо способ сделать это? есть ли у заклинания (a / hun) возможность сделать это?
С уважением.
2 ответа
Если вам не нужно заменять каждое неправильное слово, а просто указать на ошибки и напечатать предложения неинтерактивным способом, вы можете использовать ispell:
$ ispell -a < file.txt | grep ^\& > errors.txt
К сожалению, я не знаю ни одной стандартной утилиты Linux, которая делает то, что вы запрашиваете из командной строки, хотя предложение emacs в комментариях выше близко подходит.
Вы можете поэкспериментировать с такими командами:
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