Чтение онлайн

ЖАНРЫ

Командная строка Linux
Шрифт:

использует вариант алгоритма, предложенного Дональдом Э. Кнутом

(Donald E. Knuth) и Михаэлем Ф. Плассом (Michael F. Plass) в статье

"Breaking Paragraphs Into Lines", `Software--Practice & Experience'

11, 11 (November 1981), 1119-1184.

Скопируйте этот текст в текстовый редактор и сохраните в файле с именем fmt-info.txt. Теперь представьте, что нам нужно переформатировать этот текст, уместив его в колонку шириной 50 символов. Решить эту задачу можно с помощью команды fmt и ее параметра -w:

[me@linuxbox ~]$ fmt -w 50 fmt-info.txt | head

`fmt’

читает текст из файла, заданного

аргументами FILE (или со

стандартного ввода, если аргументы отсутствуют),

и выводит результат в стандартный вывод.

По умолчанию пустые строки, пробелы между

словами и отступы

сохраняются в выводе; последующие строки с

разными отступами не объединяются; символы

табуляции на входе заменяются соответствующим.

Результат не особенно впечатляет. Может быть, стоит прочитать этот текст, так как он объясняет происходящее:

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

Итак, fmt сохраняет отступ в первой строке. К счастью, fmt имеет параметр, исправляющий это:

[me@linuxbox ~]$ fmt -cw 50 fmt-info.txt

`fmt' читает текст из файла, заданного

аргументами FILE (или со стандартного ввода,

если аргументы отсутствуют), и выводит результат

в стандартный вывод.

По умолчанию пустые строки, пробелы между

словами и отступы сохраняются в выводе;

последующие строки с разными отступами не

объединяются; символы табуляции на входе

заменяются соответствующим числом пробелов и

выводятся в таком виде.

`fmt' старается разбивать строки по концам

предложений и стремится не разрывать строки

после первого слова или перед последним

словом в предложении. "Конец предложения"

определяется либо по концу абзаца, либо по

слову, завершающемуся любым из символов `.?!',

за которым следуют два пробела или символ

перевода строки, любые скобки или кавычки при

этом игнорируются. Подобно TeX, `fmt' читает

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

строк; программа использует вариант алгоритма,

предложенного Дональдом Э. Кнутом (Donald

E. Knuth) и Михаэлем Ф. Плассом (Michael

F. Plass) в статье "Breaking Paragraphs Into

Lines", `Software--Practice & Experience' 11,

11 (November 1981), 1119-1184.

Намного лучше. Добавив параметр -c, мы получили желаемый результат.

Программа fmt содержит несколько интересных параметров, которые перечислены в табл. 21.3.

Таблица 21.3. Параметры fmt

Параметр

Значение

– c

Включить режим обработки края (crown margin). В этом режиме сохраняется отступ первых

строк абзаца. Последующие строки выравниваются по второй строке

– p строка

Форматировать только строки, начинающиеся со строки, указанной в аргументе. После форматирования содержимое аргумента добавляется в начало каждой переформатированной строки. Этот параметр можно использовать для форматирования текста комментариев в исходном коде. Например, любой сценарий или конфигурационный файл, где комментарии начинаются с символа #, можно обработать командой fmt с параметром -p '# ', чтобы отформатировать только комментарии. Пример приводится ниже

– s

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

– u

Нормировать пробелы. Этот параметр применяется для форматирования в стандартном «машинописном стиле», то есть когда слова отделяются одним пробелом, а предложения — двумя. Этот режим удобно использовать для удаления выравнивающих пробелов, то есть пробелов, добавленных с целью выравнивания текста по обоим краям

– w ширина

Форматировать текст по указанной ширине. По умолчанию используется ширина 75 символов. Обратите внимание: в действительности fmt форматирует строки немного короче, чем указано в аргументе, чтобы обеспечить сбалансированность ширины текста

Особый интерес представляет параметр -p. С его помощью можно форматировать выбранные фрагменты файла, гарантировав, что все отформатированные строки будут начинаться с одной и той же последовательности символов. Многие языки программирования поддерживают комментарии, начинающиеся с символа решетки (#), и такие комментарии можно форматировать с помощью этого параметра. Давайте создадим файл, имитирующий исходный текст программы с комментариями:

[me@linuxbox ~]$ cat > fmt-code.txt

# Этот файл содержит код с комментариями.

# Эта строка - комментарий.

# За ней следует другая строка с комментарием.

# И еще одна.

Это не комментарий, а строка с кодом.

Еще одна строка с кодом.

И еще.

Файл примера содержит комментарии, начинающиеся со строки # (символ # и пробел), и строки «кода». Теперь воспользуемся командой fmt, чтобы отформатировать комментарии и при этом не затронуть код:

[me@linuxbox ~]$ fmt -w 50 -p '# ' fmt-code.txt

# Этот файл содержит код с комментариями.

# Эта строка - комментарий. За ней следует другая

# строка с комментарием. И еще одна.

Это не комментарий, а строка с кодом.

Еще одна строка с кодом.

И еще.

Обратите внимание, что смежные строки комментариев были объединены, а пустые строки и строки, не начинающиеся с указанного префикса, остались нетронутыми.

pr — форматирование текста для печати

Поделиться с друзьями: