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


142

Я знаю, что могу использовать что-то вроде cat test.txt | pr -w 80обтекания строк шириной до 80 символов, но это занимает много места сверху и снизу напечатанных строк, и это не работает в некоторых системах

Какой лучший способ заставить текстовый файл с длинными строками быть обернутыми на определенную ширину?

Бонусные баллы, если вы можете удержать его от разрыва слов.

Ответы:


177

Ты ищешь

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

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


Работает и в OS X, но имя файла должно быть после аргументов. Спасибо!
'13

2
В дополнение к этому, чтобы красиво форматировать электронные письма для текстового ответа, я использую:fold -s -w 80 email.txt | sed 's/^.*$/> &/'
Marcello Romani

2
@MarcelloRomani, разве вы не должны использовать ширину 78, так как вы добавляете два символа?
няня

1
Хм ... наверное так. Спасибо за то, что указал на это :)
Marcello Romani

2
Обратите внимание, что foldломает URL, а пока fmtнет.
Скиппи ле Гран Гуру

51

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


3
Мне особенно нравится fmt -t по сравнению со
сложением

15

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

fold -w 80 <text.txt

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

fold -sw 80 <text.txt

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

fmt -w 80 <text.txt

Недооцененный ответ. Доступно в большинстве систем. Хороший.
Merc

11

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

wrap -w 80 < textfile

Также (не по теме):

но это оставляет много места сверху и снизу печатных строк

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

   -t, --omit-header
          omit page headers and trailers

5

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


2
В настоящее время веб-сайт не работает, есть Интернет-архив и кэш Google, но все же это показывает, почему важно публиковать больше, чем просто ссылки, вы могли бы хотя бы опубликовать примеры из официальной документации.
phk

-1
fold -w 100 -s text.txt

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


1
Что ваш ответ добавляет, что другие не сделали?
Sheljohn
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.