Может ли выводить номер строки выхода и не смещаться в режиме конвейера? - PullRequest
5 голосов
/ 06 апреля 2011

Может ли aspell выводить номер строки и не смещаться в режиме конвейера для файлов html и xml?Я не могу прочитать файл построчно, потому что в этом случае aspell не может идентифицировать закрытый тег (если тег находится на следующей строке).

Ответы [ 3 ]

3 голосов
/ 19 июня 2011

Это выведет все вхождения слов с ошибками с номерами строк:

# Get aspell output...
<my_document.txt aspell pipe list -d en_GB --personal=./aspell.ignore.txt |

# Proccess the aspell output...
grep '[a-zA-Z]\+ [0-9]\+ [0-9]\+' -oh | \
grep '[a-zA-Z]\+' -o | \
while read word; do grep -on "\<$word\>" my_document.txt; done

Где:

  • my_document.txt - ваш исходный документ
  • en_GB isВаш основной выбор словаря (например, попробуйте en_US)
  • aspell.ignore.txt - это личный словарь aspell (пример ниже)
  • aspell_output.txt - это вывод aspell в режиме конвейера (стиль ispell)
  • result.txt - это файл окончательных результатов

aspell.ignore.txt пример:

personal_ws-1.1 en 500
foo
bar

пример вывода результатов .txt (для словаря en_GB):

238:color
302:writeable
355:backends
433:dataonly

Вы также можете распечатать всю строку, изменив последний grep -on на grep -n.

1 голос
/ 16 августа 2015

Я использую следующий скрипт для проверки орфографии и для обхода неудобного вывода aspell -a / ispell.В то же время сценарий также решает проблему, заключающуюся в том, что ординалы, такие как 2nd, не распознаются Aspell, просто игнорируя все сообщения Aspell, которые не являются его собственным словом.

#!/bin/bash

set +o pipefail

if [ -t 1 ] ; then
    color="--color=always"
fi

! for file in "$@" ; do
    <"$file" aspell pipe list -p ./dict --mode=html |
    grep '[[:alpha:]]\+ [0-9]\+ [0-9]\+' -oh |
    grep '[[:alpha:]]\+' -o |
    while read word ; do
        grep $color -n "\<$word\>" "$file"
    done
done | grep .

Выдаже получить цветной вывод, если stdout скрипта является терминалом, и вы получаете статус выхода 1 в случае, если скрипт обнаружил орфографические ошибки, в противном случае статус выхода скрипта 0.

Кроме того, скрипт защищает себя от pipefail, который является довольно популярной опцией для установки, например, в Makefile, но не работает для этого скрипта.И последнее, но не менее важное: этот скрипт явно использует [[:alpha:]] вместо [a-zA-Z], что не так сложно, когда он также соответствует не-ASCII символам, таким как немецкий äöüÄÖÜß и другие.[a-zA-Z] тоже так, но на каком-то уровне это неожиданно.

1 голос
/ 18 июня 2011

Это просто идея, я еще не пробовал (я на Windows-машине :(). Но, возможно, вы могли бы передать html-файл через head (с ограничением в байтах) и подсчитать переводы строки, используя grep для найдите номер своей строки. Он не эффективен и не хорош, но может сработать.

cat icantspell.html | head -c <offset from aspell> | egrep -Uc "$"
...