Как я могу перенести текст в определенном размере столбца?

Ctrl-Q является действительно ответом. Я думал, что брошу в небольшой истории этого, которое слишком длинно для помещений в поля корректного ответа ak2.

Назад в средневековье, терминал был большим элементом оборудования, который соединился с удаленным устройством (первоначально другой терминал, потому что телетайпы было настолько легче учиться работать, чем телеграфный ключ) по длинному проводу или через телефонные линии с модемами. К тому времени, когда Unix разрабатывал, код ASCII был уже хорошо установлен (хотя конкурирующий код EBCDIC от IBM был все еще силой, с которой будут считаться).

Самые ранние терминалы вели печатный учет каждого полученного символа. Пока символы прибыли не быстрее, чем печатающая головка могла ввести их, по крайней мере. Но как только основанные на CRT терминалы были возможны, проблема возникла, которому только приблизительно 25 строк соответствуют на CRT, и 25 строк 80 символов представили достаточно RAM, что никакая мысль серьезно об обеспечении большего количества RAM для символов, которые прокрутили от вершины экрана.

Таким образом, некоторая конвенция была необходима, чтобы сигнализировать, что передающий конец должен приостановиться, чтобы позволить читателю нагнать.

7-разрядный код ASCII имеет 33 кодовых точки, посвященные управляющим символам (от 0 до 31 и 127). Некоторые из тех действительно хорошо установили цели, такой как NUL (начальный участок магнитной ленты чистого листа для поточной обработки, разрывов и соединений встык), DEL ("вычеркнутые" символы на перфоленте, обозначенной путем перфорации всех семи дыр), BEL (звените!), CR, LF, и TAB. Но четыре были определены явно для управления самим оконечным устройством (DC1 кому: DC4 иначе Ctrl+Q, Ctrl+R, Ctrl+S и Ctrl+T).

Мое лучшее предположение - то, что некоторый инженер думал, что (как мнемоника идут), "S" для "Остановки" и "Q" для "Продолжаются", не были слишком плохи, и присвоился DC3 для значения, "прекратите отправлять" и DC1 для значения "хорошо продолжите отправлять теперь".

Даже та конвенция была уже хорошо установлена к тому времени, когда Unix оставлял вложенное множество в Bell Labs для выхода в мир.

Конвенция известна как программное управление потоком и чрезвычайно распространена в реальных последовательных устройствах. Не легко реализовать правильно, поскольку это предотвращает использование любого из тех символов для любой другой цели в канале передачи, и Стоповый сигнал должен быть обработан перед полученными символами любого ожидания, чтобы не отправлять больше, чем принимающий конец может обработать.

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

Конечно, сегодняшнее окно терминала не использует фактический физический последовательный порт, имеет полосы прокрутки и действительно не нуждается в программном квитировании вообще. Но конвенция сохраняется.

Я вспоминаю заявление, что Richard Stallman получил жалобы на свое отображение Ctrl+S к возрастающему поиску в первых выпусках emacs, и что он был довольно неприятен любому пользователю, который должен был зависеть от управляемого соединения потока 7-разрядного, программного обеспечения.

147
08.08.2016, 18:18
6 ответов

Вы ищете

fold -w 80 -s text.txt
  • - w говорит ширину текста, где 80 является стандартным.
  • - s говорит для повреждения в пробелах, а не в словах.

Это - стандартный путь, но существуют другие системы, которым нужен "-c" вместо "-w".

182
27.01.2020, 19:28
  • 1
    Работы над OS X также, но именем файла должны быть после args.Спасибо! –  rdrey 03.09.2014, 01:13
  • 2
    На ноте стороны, на приятно электронные письма формата для ответа только для текста, я использую: fold -s -w 80 email.txt | sed 's/^.*$/> &/' –  Marcello Romani 10.02.2015, 23:10
  • 3
    @MarcelloRomani, разве Вы не должны использовать ширину 78, так как Вы предварительно ожидаете два символа? –  nanny 26.02.2015, 16:59
  • 4
    Хм... Наверное. Спасибо за указание, что :) –  Marcello Romani 27.02.2015, 14:35
  • 5
    Отметьте это fold URL повреждений, в то время как fmt не делает. спасибо –  Skippy le Grand Gourou 28.03.2017, 14:05

В дополнение к fold, смотрите на fmt. fmt попытки выбрать разрывы строки разумно, чтобы заставить текст выглядеть хорошим. Это не нарушает длинные обещания, скорее это переносится только пробелами. Это также присоединится к смежным строкам, который хорош для прозы, но плохо для файлов журнала или другого форматированного текста.

53
27.01.2020, 19:28
  • 1
    я особенно как fmt-t сравненный с –  lkraav 24.12.2012, 23:26

И для большего количества параметров форматирования, посмотрите на par - http://www.nicemice.net/par/

5
27.01.2020, 19:28
  • 1
    В настоящее время веб-сайт снижается, существует интернет-Архив и кэш Google, но все еще это показывает, почему важно отправить больше, чем просто ссылки, Вы, возможно, по крайней мере, отправили примеры из официальной документации. –  phk 27.12.2016, 18:31

Другой (менее известный) инструмент, который делает то, что Вы хотите, wrap от GNU Talkfilters:

wrap -w 80 < textfile

Также (вне темы):

но это помещает много пространства на вершине и нижней части печатных строк

добавить -t при вызове pr опустить заголовки/трейлеры:

   -t, --omit-header
          omit page headers and trailers
11
27.01.2020, 19:28
fold -w 100 -s text.txt

Работал для меня, так как мне нужно разделить каждую строку до 100 символов

-2
27.01.2020, 19:28

1) гарантированная фиксированная ширина строки с разбиением слов:

fold -w 80 <text.txt

2) гарантированная фиксированная ширина строки с чрезвычайным разбиением слов (слово разбивается только если оно слишком велико, чтобы поместиться в строке):

fold -sw 80 <text.txt

3) перспективная фиксированная ширина строки без разбиения слов (если слово слишком велико, чтобы поместиться в строке, оно остается как есть, так что в итоге некоторые строки могут быть больше по размеру, чем нужно):

fmt -w 80 <text.txt
15
27.01.2020, 19:28

Теги

Похожие вопросы