Як використовувати команду fold в Linux

Команда Linux fold здатна приборкати довгі рядки тексту. Вона допомагає впоратися з великими обсягами тексту, безкінечними рядками та неформатованими потоками, контролюючи ширину відображення. Розглянемо, як це працює.

Розуміння рядків тексту в терміналі Linux

Перш ніж боротися з проблемою, потрібно її зрозуміти. Отже, що ж таке рядок тексту? Це послідовність символів — літер, цифр, спеціальних знаків та пробілів — яка завершується спеціальним байтом, що вказує на початок нового рядка. В операційних системах Linux та Unix, символ нового рядка, також відомий як переведення рядка, служить індикатором кінця рядка. Це байт зі значенням 0x0a у шістнадцятковому кодуванні, що відповідає 10 у десятковій системі.

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

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

З появою електричних друкарських машинок важіль замінили клавішею з написом Carriage Return або просто Return. Деякі ранні комп’ютери, наприклад, BBC Micro, досі використовують назву Return для того, що ми зараз знаємо як клавішу Enter.

Символи нового рядка зазвичай невидимі. Ми можемо помітити лише їхню дію. Завдяки їм, програмне забезпечення, яке відображає або обробляє текст, починає новий рядок.

Проблема з довгими рядками

Текст без символів нового рядка, або з їх недостатньою кількістю, стає занадто широким для комфортного читання у вікні терміналу. Це може дратувати, хоч і не є критичним.

Значно більшою проблемою є обробка рядків такої довжини, що це створює труднощі для програмного забезпечення, яке має обробляти, передавати або отримувати текст. Це може бути пов’язано з обмеженнями внутрішнього буфера або іншими параметрами програмного забезпечення, які не піддаються налаштуванню.

На щастя, існує рішення – команда fold.

Знайомство з командою fold

Розглянемо приклад тексту, який містить довгі рядки. Зауважте, що тут ми говоримо не про речення, хоча текст взято з “Мобі Діка” Германа Мелвілла, що робить його ще цікавішим.

Рядок тексту – це все, що знаходиться між останнім символом нового рядка (або початком файлу, якщо це перший рядок) і наступним символом нового рядка. Рядок може містити багато речень, і може кілька разів “обернутися” у вікні терміналу, але це все одно буде один рядок тексту.

Погляньмо на текст у його вихідному вигляді:

less moby-dick.txt

Так виглядає текст у виводі команди less:

Текст розтягується від одного краю вікна до іншого, перенесення рядків відбувається незграбно, розриваючи слова посередині.

У нас є інша версія файлу з короткими рядками:

less short-lines-moby-dick.txt

У цьому файлі рядки набагато коротші. Кожен рядок завершується символом нового рядка.

Використовуючи команду hexdump, ми можемо побачити значення байтів у файлі і виявити символи нового рядка. Опція -C (канонічний) форматує вивід, щоб відображати шістнадцяткові значення.