Поиск по сайту:

Как использовать команду fold в Linux


Команда Linux fold устраняет непослушный вывод. Читайте большие фрагменты текста, бесконечные строки и неформатированные потоки, контролируя ширину вывода. Научиться.

Как строки текста работают в терминале Linux

Первое правило борьбы с Linux: знай своего врага. Итак, давайте определимся. Что такое строка текста? Это последовательность символов — букв, цифр, символов и пробелов — которая заканчивается специальным байтом, означающим «начать новую строку». В Linux и Unix символ новой строки, также называемый переводом строки, используется в качестве индикатора конца строки. Это байт со значением 0x0a в шестнадцатеричном формате и десять в десятичном.

Различные операционные системы используют разные значения байтов для обозначения конца строки. Windows использует двухбайтовую последовательность. В текстовых файлах Windows за символом новой строки сразу следует символ возврата каретки, который имеет значение 0x0d в шестнадцатеричном формате и тринадцать в десятичном формате.

Термины «перевод строки» и «возврат каретки» восходят к пишущей машинке. Валик, цилиндр, вокруг которого была обернута бумага, был установлен на подвижной каретке. Каретка перемещалась на один символ влево каждый раз, когда вы нажимали клавишу. Чтобы начать новую строку, вы нажимали на рычаг, который возвращал каретку в исходное положение, вращал ролик и перемещал бумагу вверх на высоту одной строки. Это действие было известно как возврат каретки, а вращение цилиндра (и продвижение бумаги) было известно как перевод строки.

Рычаг был заменен ключом, когда пишущая машинка стала электрифицированной. Ключ был помечен Carriage Return или просто Return. Некоторые ранние компьютеры, такие как BBC Micro, все еще использовали название Return для того, что мы теперь называем клавишей Enter.

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

Но в чем проблема с длинными очередями?

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

Более пагубная проблема заключается в том, что приходится иметь дело со строками такой длины, что они создают проблему для программного обеспечения, которое должно обрабатывать, передавать или получать текст. Это может быть вызвано внутренней длиной буфера или другими аспектами программного обеспечения, которые вы не можете настроить.

Но для этого есть исправление, которое называется fold.

Первые шаги со сгибом

Давайте взглянем на часть текста, в которой есть очень-очень длинные строки. Обратите внимание, что мы не говорим здесь о предложениях. (Хотя текст взят из «Моби Дика» Германа Мелвилла, так что мы взяли лучшее из обоих миров.)

Строка текста — это все от последнего символа новой строки (или начала файла, если это первая строка в файле) до следующего символа новой строки, независимо от того, что находится между ними. Строка может содержать много предложений. Он может много раз переворачиваться в окне терминала. Но это по-прежнему одна строка текста.

Давайте посмотрим на текст в его необработанном виде:

less moby-dick.txt

Текст отображается в less:

Текст растягивается от одного края окна до другого, переносы строк некрасивые, и они разрывают слова посередине.

У нас есть другая версия файла с короткими строками:

less short-lines-moby-dick.txt

Строки в этом файле намного короче. Каждая строка завершается символом новой строки.

Если мы используем команду hexdump, мы можем просмотреть значения байтов в файле и увидеть символы новой строки. Параметр -C (канонический) форматирует вывод для отображения шестнадцатеричных значений в основной части дисплея с текстовыми эквивалентами в столбце сбоку. Мы направим вывод в less:

hexdump -C short-lines-moby-dick.txt | less

Нажав косую черту «/», вы войдете в функцию поиска less. Введите «0a» и нажмите Enter. Символы новой строки будут выделены в тексте. Вы можете прокрутить файл и посмотреть, где они появляются. При необходимости вы можете прокручивать вывод вбок с помощью клавиш Стрелка влево и Стрелка вправо.

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

Таким образом, проблемы возникают как с длинными, так и с короткими очередями.

Сокращение длинных очередей

Команда fold имеет параметр -w (ширина), который позволяет указать новую максимальную ширину для раздела текста. Мы будем отображать текст Моби Дика с максимальной шириной 50 символов:

fold -w 50 moby-dick.txt

Текст отображается в окне терминала с новой максимальной длиной файла. Исходный файл не изменен. Переформатируется только вывод из fold.

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

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

Разделение линий в пробелах

Мы можем использовать параметр -s (пробелы), чтобы убедиться, что строки разделяются только символами пробела, а слова не разбиваются на две строки.

fold -w 50 -s moby-dick.txt

Вывод теперь имеет рваное правое поле, но его легче читать. Все слова заканчиваются на строках, с которых они начинались.

Делаем короткие строки длиннее

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

fold -w 75 short-lines-moby-dick.txt

Символы новой строки удалены, и теперь текст переносится на отведенную максимальную длину или перед ней.

Сделать изменения постоянными

fold не может изменить исходный файл. Если вы хотите сохранить изменения, вам придется перенаправить вывод из fold в новый файл. Мы перенаправим вывод в файл с именем «modified-moby-dick.txt».

fold -w 75 -s short-lines-moby-dick.txt > modified-moby-dick.txt

Давайте посмотрим на наш новый файл:

less modified-moby-dick.txt

Как выглядит наш новый файл?

Теперь текст аккуратно обтекается по новой ширине строки, которая шире, чем длина строки в исходном файле.

Использование fold с потоками

Мы можем использовать fold для переформатирования потоков текста. Он не ограничивается работой исключительно с файлами. Давайте посмотрим, как выглядит необработанный вывод инструмента journalctl. Опция -f (follow) показывает самые новые записи в журнале systemd и обновляется по мере поступления новых записей.

sudo journalctl -f

Вывод переносится на край окна терминала.

Выглядит неплохо, но для наглядности немного уменьшим его ширину. Мы собираемся направить вывод из journalctl в fold. Мы устанавливаем максимальную ширину в 65 символов и разрываем строки только пробелами.

sudo journalctl -f | fold -w 65 -s

Дисплей выглядит немного менее громоздким и более аккуратным.

Стены сплошного текста могут показаться непроницаемыми. Они отталкивают и утомляют. Когда вам нужно увидеть лес за деревьями, вызовите fold и наведите немного порядка.

RELATED: Best Linux Laptops for Developers and Enthusiasts