Утилита для форматирования текстовых файлов


Автор темы
babay
Сообщения: 84
Зарегистрирован: 22 фев 2012, 12:48

Утилита для форматирования текстовых файлов

#1

Сообщение babay » 05 янв 2016, 21:34

Всех с наступившим!
Возник такой вопрос - есть ли под линукс утилиты, которые позволяют быстро отформатировать текстовые файлы. Проблема в чем: есть текстовой файл, который скачивается из инета, например УК РФ 8)
В нем все строки отделяются друг от друга пустой строкой, строки сами по себе коротенькие, в начале строки пять пробелов. Нужно привести их к человеческому виду - чтобы убрать пустые строки, убрать пробелы в начале абзаца и, например, заменить два перевода строки одним.

Аватара пользователя

denkin
Сообщения: 1966
Зарегистрирован: 07 сен 2011, 17:21

Re: Утилита для форматирования текстовых файлов

#2

Сообщение denkin » 05 янв 2016, 22:52

я использовал в подобных случаях возможности OpenOffice/LibreOffice - Найти и заменить, вручную. Хотя если делать это часто - можно попробовать написать макрос.


Автор темы
babay
Сообщения: 84
Зарегистрирован: 22 фев 2012, 12:48

Re: Утилита для форматирования текстовых файлов

#3

Сообщение babay » 05 янв 2016, 23:18

denkin писал(а):я использовал в подобных случаях возможности OpenOffice/LibreOffice - Найти и заменить, вручную. Хотя если делать это часто - можно попробовать написать макрос.
В исходном файле 30 тыс. строк... При подстановках в офисе происходят непонятные вещи - все замирает, тупит... Короче невозможно работать...
Да и макрос по каждому конкретному случаю не хотелось бы писать, чукча ведь не писатель))

Аватара пользователя

serg666
Сообщения: 674
Зарегистрирован: 26 фев 2013, 21:15

Re: Утилита для форматирования текстовых файлов

#4

Сообщение serg666 » 06 янв 2016, 00:13

Поставленные задачи выполняет утилита sed (stream editor), правда нужно знать и уметь пользоваться регулярными выражениями regex, так что боюсь вам она не поможет, но именно для вашей задачи я напишу команду(ы):
Предположим что у нас есть вот такой текст в файле qaz.txt
Показать

Код: Выделить всё

user@homecat ~ $ cat qaz.txt 
        Всех с наступившим!

       Возник такой вопрос - есть ли под линукс утилиты, которые позволяют быстро отформатировать

      текстовые файлы. Проблема в чем: есть текстовой файл, который скачивается из инета, например

      УК РФ 8)

      В нем все строки отделяются друг от друга пустой строкой, строки сами по себе коротенькие,

        в начале строки  пять пробелов. Нужно привести их к человеческому виду - чтобы убрать пустые строки,

        убрать пробелы в начале абзаца и, например, заменить два перевода строки одним

user@homecat ~ $
Первым делом его на всякий случай надо преобразовать из DOS/WIN формата в UNIX формат. Дело в том что в DOS/WIN строки оканчиваются символами CR/LF, а в UNIX только одним символом CR.
Выполним команду cat qaz.txt | tr -d '\r' и увидим, что в принципе ничего особо не поменялось. Команда cat qaz.txt считывает файл qaz.txt и подает на вход команде tr -d '\r' , а та вырезает в конце строк символы LF и выводит текст на экран.
Далее вырежем пустые строки встречающиеся в файле.
Выполним команду cat qaz.txt | tr -d '\r' | sed '/^$/d' , т.е добавим в фильтр еще команду sed '/^$/d' , которая вырезает пустые строки.
И теперь текст станет выглядеть примерно так
Показать

Код: Выделить всё

user@homecat ~ $ cat qaz.txt | tr -d '\r' | sed '/^$/d'
        Всех с наступившим!
       Возник такой вопрос - есть ли под линукс утилиты, которые позволяют быстро отформатировать
      текстовые файлы. Проблема в чем: есть текстовой файл, который скачивается из инета, например
      УК РФ 8)
      В нем все строки отделяются друг от друга пустой строкой, строки сами по себе коротенькие,
        в начале строки  пять пробелов. Нужно привести их к человеческому виду - чтобы убрать пустые строки,
        убрать пробелы в начале абзаца и, например, заменить два перевода строки одним
user@homecat ~ $
Осталось только убрать лидирующие 5 пробелов в начале строк. Добавим еще один фильтр sed 's/^5_ПРОБЕЛОВ//' в наш конвейер:

Код: Выделить всё

user@homecat ~ $ cat qaz.txt | tr -d '\r' | sed '/^$/d' | sed 's/^     //'
   Всех с наступившим!
  Возник такой вопрос - есть ли под линукс утилиты, которые позволяют быстро отформатировать
 текстовые файлы. Проблема в чем: есть текстовой файл, который скачивается из инета, например
 УК РФ 8)
 В нем все строки отделяются друг от друга пустой строкой, строки сами по себе коротенькие,
   в начале строки  пять пробелов. Нужно привести их к человеческому виду - чтобы убрать пустые строки,
   убрать пробелы в начале абзаца и, например, заменить два перевода строки одним
user@homecat ~ $
Вот он ожидаемый результат, осталось только сохранить его в файл, для этого добавим перенаправление вывода в файл и финальная команда будет выглядеть так

Код: Выделить всё

cat ИМЯ_ВХОДНОГО_ФАЙЛА | tr -d '\r' | sed '/^$/d' | sed 's/^     //' > ИМЯ_ВЫХОДНОГО_ФАЙЛА

Аватара пользователя

delvin-fil
Сообщения: 341
Зарегистрирован: 09 фев 2014, 12:05

Re: Утилита для форматирования текстовых файлов

#5

Сообщение delvin-fil » 06 янв 2016, 08:11

Помимо указанного serg666 однострочника, рекомендую посмотреть:
http://ant0.ru/sed1line.html
Возможно найдете ответы на еще не заданные вопросы. :beer:


Автор темы
babay
Сообщения: 84
Зарегистрирован: 22 фев 2012, 12:48

Re: Утилита для форматирования текстовых файлов

#6

Сообщение babay » 06 янв 2016, 12:03

Спасибо! Короче без регулярных выражений - никуда.
Еще бы хорошо, чтобы все абзацы сливались в одну строку - а то абзац искусственно делят на короткие строки.
Вот еще что нарыл - если в gedit поиск и замену делать по регулярным выражениям, то в строке поиска выражение \r\n - это пустая строка, если в строке замены ничего не указывать - то убираются пустые строки

Аватара пользователя

zhart
Администратор
Сообщения: 1829
Зарегистрирован: 16 дек 2010, 13:09

Re: Утилита для форматирования текстовых файлов

#7

Сообщение zhart » 06 янв 2016, 12:16

Да, регулярные выражения — сила. Я для подобных целей использую Sublime.

Аватара пользователя

delvin-fil
Сообщения: 341
Зарегистрирован: 09 фев 2014, 12:05

Re: Утилита для форматирования текстовых файлов

#8

Сообщение delvin-fil » 06 янв 2016, 12:31

cat t.txt | tr -d '\r\n'
\r - возврат каретки (таки абзац)
\n - перенос строки
не?


Автор темы
babay
Сообщения: 84
Зарегистрирован: 22 фев 2012, 12:48

Re: Утилита для форматирования текстовых файлов

#9

Сообщение babay » 06 янв 2016, 12:46

delvin-fil писал(а):cat t.txt | tr -d '\r\n'
\r - возврат каретки (таки абзац)
\n - перенос строки
не?
Оно


Автор темы
babay
Сообщения: 84
Зарегистрирован: 22 фев 2012, 12:48

Re: Утилита для форматирования текстовых файлов

#10

Сообщение babay » 06 янв 2016, 18:54

Под виндой была какая-то простенькая программа, автоматически могла выделять абзацы и сливать строки и многое другое.

Закрыто