← All posts tagged sed

bob
sed Каждую сессию, первое, что я делаю при подготовке к экзамену — это распознаю фото списка вопросов и оформляю их в LaTeX'е. Форматировать результат распознавание руками тяжело, поэтому я использую sed:
cat input.txt | sed -r 's/([^0-9])([0-9]+)/\1\n\2/g' | sed -r '/^$/d' | sed -r 's/[ ]+/ /g' | \
sed -r 's/ $//' | sed -r 's/ \./\./g' | sed -r 's/\.([^ ])/\. \1/g' | \
sed -r 's/ ,/,/g' | sed -r 's/,([^ ])/, \1/g' | sed -r 's/\( /\(/g' | \
sed -r 's/ \)/\)/g' | sed -r 's/\[ /\[/g' | sed -r 's/ \]/\]/g' | \
sed -r 's/[^\.]$/&./' | sed -r 's/^[ ][0-9]+\.{0,1}[ ]/ \\item ' |sed -r 's\. \./\./' | \
sed -r 's/\. /\.\n /g' >> result.tex

Это:
sed -r 's/([^0-9])([0-9]+)/\1\n\2/g' # вставить переводы строк перед номерами вопросов
sed -r '/^$/d' # удалить пустые строки
sed -r 's/[ ]+/ /g' # заменить несколько пробелов одним
sed -r 's/ $//' # удалить пробел стоящий в конце строки
sed -r 's/ \./\./g' # удалить пробел перед точкой
sed -r 's/\.([^ ])/\. \1/g' # вставить пробел после точки
sed -r 's/ ,/,/g' # удалить пробел перед запятой
sed -r 's/,([^ ])/, \1/g' # вставить пробел после запятой
sed -r 's/\( /\(/g' # удалить пробел после `('
sed -r 's/ \)/\)/g' # удалить пробел перед `)'
sed -r 's/\[ /\[/g' # удалить пробел после `['
sed -r 's/ \]/\]/g' # удалить пробел перед `]'
sed -r 's/[^\.]$/&./' # добавить в конец строки точку, если её там нет
sed -r 's/^[ ][0-9]+\.{0,1}[ ]/ \\item /' # заменить <пробелы><номер вопроса><вопрос> на `\item <вопрос>'
sed -r 's/\. \./\./' # заменить `. .' на `.'
sed -r 's/\. /\.\n /g' Заменить точки на перевод строки с пробелами, чтобы каждое предложение было на отдельной строке

Не все use case были протестированы, и не все проблемы от распознования убиваются, но лично мне эта "одна" строчка сильно экономит время.