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

на главную

Жанры

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

Дополнительное задание

Существует несколько интересных команд обработки текста, на которые стоит обратить внимание. Среди них split (разбивает файлы на фрагменты), csplit (разбивает файлы на фрагменты, опираясь на контекст) и sdiff (выводит различия между файлами, что называется, «бок о бок»).

12 Английский аналог фразы: «Съешь же ещё этих мягких французских булок, да выпей чаю», содержащей все буквы алфавита. В этой главе, чтобы избежать полного переписывания всех авторских примеров,

мы будем работать с ней. — Примеч. ред.

21. Форматирование вывода

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

• nl — нумерует строки.

• fold — выполняет перенос строк, ограничивая их указанной длиной.

• fmt — выполняет простое форматирование текста.

• pr — форматирует текст для печати.

• printf — форматирует и выводит данные.

• groff — система форматирования документов.

Инструменты простого форматирования

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

nl — нумерация строк

Программа nl — предназначена для решения простой задачи: она выполняет нумерацию строк. В простейшем случае использования nl напоминает команду cat -n:

[me@linuxbox ~]$ nl distros.txt | head

1 SUSE 10.2 12/07/2006

2 Fedora 10 11/25/2008

3 SUSE 11.0 06/19/2008

4 Ubuntu 8.04 04/24/2008

5 Fedora 8 11/08/2007

6 SUSE 10.3 10/04/2007

7 Ubuntu 6.10 10/26/2006

8 Fedora 7 05/31/2007

9 Ubuntu 7.10 10/18/2007

10 Ubuntu 7.04 04/19/2007

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

nl поддерживает идею логических страниц. Это дает возможность начинать нумерацию на каждой странице заново. С помощью параметров можно определить номер первой строки и протяженность нумерации, а также формат номеров. Логическую страницу можно разбить на заголовок, тело и нижний колонтитул. В каждом разделе нумерация может начинаться с начала и/или использоваться разный формат нумерации. Если программе nl передать несколько файлов, она будет интерпретировать их как один поток текста. Разделы в потоке выделяются добавлением в поток немного странной разметки, как показано в табл. 21.1.

Таблица 21.1. Разметка nl

Разметка

Значение

\:\:\:

Начало заголовка логической страницы

\:\:

Начало тела логической

страницы

\:

Начало нижнего колонтитула логической страницы

Каждый элемент разметки из представленных в табл. 21.1 должен находиться в отдельной строке. После обработки элемента программа nl удалит его из потока текста.

В табл. 21.2 перечислены наиболее часто используемые параметры nl.

Таблица 21.2. Наиболее часто используемые параметры nl

Параметр

Значение

– b стиль

Стиль нумерации тела, где аргумент стиль может иметь следующие значения:

a — нумеровать все строки;

t — нумеровать только непустые строки. Этот стиль применяется по умолчанию;

n — не нумеровать;

регулярное выражение — нумеровать только строки, соответствующие простому регулярному выражению

– f стиль

Стиль нумерации нижнего колонтитула. По умолчанию имеет значение n (нет нумерации)

– h стиль

Стиль нумерации заголовка. По умолчанию имеет значение n (нет нумерации)

– i число

Шаг приращения номеров на странице. По умолчанию имеет значение 1

– n формат

Формат номеров, где аргумент формат может иметь следующие значения:

ln — с выравниванием по левому краю, без ведущих нулей;

rn — с выравниванием по правому краю, без ведущих нулей. Используется по умолчанию;

rz — с выравниванием по правому краю, с ведущими нулями

– p

Не сбрасывать нумерацию в начале каждой логической страницы

– s строка

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

– v число

Номер первой строки на каждой логической странице. По умолчанию имеет значение 1

– w ширина

Ширина поля номера строки. По умолчанию имеет значение 6

Следует отметить, что на практике нумеровать строки приходится довольно редко, но мы можем использовать nl, чтобы посмотреть, как объединить несколько инструментов для решения более сложных задач. Возьмем за основу наши наработки, созданные в предыдущей главе для получения отчета о дистрибутивах Linux. Поскольку далее мы будем использовать программу nl, включим в текст разметку, отделяющую заголовок/тело/нижний колонтитул. Для этого откройте в текстовом редакторе сценарий для sed из предыдущей главы, добавьте в него строки с разметкой, как показано ниже, и сохраните сценарий в файле с именем distros-nl.sed:

# Сценарий для sed, создающий отчет о дистрибутивах Linux

1 i\

\\:\\:\\:\

\

Linux Distributions Report\

\

Name Ver. Released\

– --- ---- --------\

\\:\\:

s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/

$ a\

\\:\

\

End Of Report

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

Поделиться:
Популярные книги

Генерал Империи

Ланцов Михаил Алексеевич
4. Безумный Макс
Фантастика:
альтернативная история
5.62
рейтинг книги
Генерал Империи

Приручитель женщин-монстров. Том 1

Дорничев Дмитрий
1. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 1

Виконт. Книга 1. Второе рождение

Юллем Евгений
1. Псевдоним `Испанец`
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.67
рейтинг книги
Виконт. Книга 1. Второе рождение

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Магия чистых душ 3

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Магия чистых душ 3

Шипучка для Сухого

Зайцева Мария
Любовные романы:
современные любовные романы
8.29
рейтинг книги
Шипучка для Сухого

Метатель. Книга 2

Тарасов Ник
2. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 2

Отмороженный 5.0

Гарцевич Евгений Александрович
5. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 5.0

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Деспот

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Огненный князь 6

Машуков Тимур
6. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 6

Ваше Сиятельство 5

Моури Эрли
5. Ваше Сиятельство
Фантастика:
городское фэнтези
аниме
5.00
рейтинг книги
Ваше Сиятельство 5

"Фантастика 2024-5". Компиляция. Книги 1-25

Лоскутов Александр Александрович
Фантастика 2024. Компиляция
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Фантастика 2024-5. Компиляция. Книги 1-25

Поступь Империи

Ланцов Михаил Алексеевич
7. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Поступь Империи