<Предыдущая | Содержание: | Следующая>
nl - Число строк
В nl Программа - довольно загадочный инструмент, используемый для выполнения простой задачи. Он нумерует строки. В простейшем использовании он напоминает кошка -n:
[я @ linuxbox ~] $ nl distros.txt | голова
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 |
Подобно кошка, nl может принимать либо несколько файлов в качестве аргументов командной строки, либо стандартный ввод. Тем не мение, nl имеет ряд опций и поддерживает примитивную форму разметки, позволяющую использовать более сложные виды нумерации.
nl поддерживает концепцию, называемую «логическими страницами» при нумерации. Это позволяет nl сбрасывать (начинать заново) числовую последовательность при нумерации. Используя опции, можно установить начальный номер на определенное значение и, в некоторой степени, его формат. Логическая страница подразделяется на верхний, основной и нижний колонтитулы. В каждом из этих разделов нумерация строк может быть сброшена и / или ей может быть назначен другой стиль. Если nl задано несколько файлов, он обрабатывает их как один поток текста. Разделы в текстовом потоке обозначаются наличием довольно странной разметки, добавленной к тексту:
Таблица 21-1: Разметка nl
Разметка Значение
Разметка Значение
\: \: \: Начало заголовка логической страницы
\: \: Начало тела логической страницы
\: Начало нижнего колонтитула логической страницы
Каждый из вышеперечисленных элементов разметки должен отображаться отдельно в отдельной строке. После обработки элемента разметки nl удаляет его из текстового потока.
Вот общие варианты nl:
Таблица 21-2: Общие параметры nl
Вариант Значение
Вариант Значение
-b стиль Установить нумерацию тела на стиль, Где стиль является одним из следующих:
a = пронумеровать все строки
t = количество только непустых строк. Это значение по умолчанию.
n = нет
pRegExp = количество только строк, соответствующих базовому регулярному выражению
регулярное выражение.
-f стиль Установить нумерацию нижнего колонтитула на стиль. По умолчанию n (нет).
-h стиль Установить нумерацию заголовков на стиль. По умолчанию n (нет).
-i номер Установите шаг нумерации страниц на номер. По умолчанию - один.
-n формат Устанавливает формат нумерации на формат, где формат:
ln = выровнено по левому краю, без ведущих нулей.
rn = выровненный по правому краю, без ведущих нулей. Это значение по умолчанию.
rz = по правому краю, с ведущими нулями.
-p Не сбрасывать нумерацию страниц в начале каждой логической страницы.
-s string Добавить string до конца каждого номера строки, чтобы создать разделитель.
По умолчанию - одиночный символ табуляции.
-v номер Установите номер первой строки каждой логической страницы на номер. По умолчанию - один.
-w ширина Установите ширину поля номера строки на ширина. По умолчанию 6.
По общему признанию, мы, вероятно, не будем так часто нумеровать строки, но мы можем использовать nl чтобы посмотреть, как мы можем объединить несколько инструментов для выполнения более сложных задач. Мы продолжим работу, проделанную в предыдущей главе, чтобы подготовить отчет о дистрибутивах Linux. Поскольку мы будем использовать nl, будет полезно включить его разметку верхнего / основного / нижнего колонтитула. Для этого добавим его в СЕПГ сценарий из предыдущей главы. Используя наш текстовый редактор, мы изменим сценарий следующим образом и сохраним его как дистрибутивы-nl.sed:
# sed скрипт для создания отчета о дистрибутивах Linux
1 я \
\\: \\: \\: \
\
Отчет о дистрибутивах Linux \
\
Имя Ver. Выпущенный\
---- ---- -------- \
\\: \\:
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ a \
\\: \
\
Конец отчета
# sed скрипт для создания отчета о дистрибутивах Linux
1 я \
\\: \\: \\: \
\
Отчет о дистрибутивах Linux \
\
Имя Ver. Выпущенный\
---- ---- -------- \
\\: \\:
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ a \
\\: \
\
Конец отчета
Скрипт теперь вставляет nl разметка логической страницы и добавление нижнего колонтитула в конце отчета. Обратите внимание, что нам пришлось удвоить обратную косую черту в нашей разметке, потому что они обычно интерпретируются как escape-символ с помощью СЕПГ.
Затем мы создадим наш расширенный отчет, объединив sort, СЕПГи nl:
[я @ linuxbox ~] $ sort -k 1,1 -k 2n distros.txt | sed -f distros-nl.s ed | нл
Отчет о дистрибутивах Linux
Имя | Ver. | Выпущенный |
---- | ---- | -------- |
1 | Fedora | 5 | 2006-03-20 |
2 | Fedora | 6 | 2006-10-24 |
3 | Fedora | 7 | 2007-05-31 |
4 | Fedora | 8 | 2007-11-08 |
5 | Fedora | 9 | 2008-05-13 |
6 | Fedora | 10 | 2008-11-25 |
7 | SUSE | 10.1 | 2006-05-11 |
8 | SUSE | 10.2 | 2006-12-07 |
9 | SUSE | 10.3 | 2007-10-04 |
10 | SUSE | 11.0 | 2008-06-19 |
11 | Ubuntu | 6.06 | 2006-06-01 |
12 | Ubuntu | 6.10 | 2006-10-26 |
13 | Ubuntu | 7.04 | 2007-04-19 |
14 | Ubuntu | 7.10 | 2007-10-18 |
15 | Ubuntu | 8.04 | 2008-04-24 |
16 | Ubuntu | 8.10 | 2008-10-30 |
Конец отчета
Наш отчет - это результат нашей цепочки команд. Сначала мы сортируем список по названию и версии дистрибутива (поля 1 и 2), затем обрабатываем результаты с помощью СЕПГ, добавляя заголовок отчета (включая разметку логической страницы для nl) и нижний колонтитул. Наконец, обрабатываем результат с помощью nl, который по умолчанию нумерует только те строки текстового потока, которые принадлежат основной части логической страницы.
Мы можем повторить команду и поэкспериментировать с разными вариантами nl. Вот несколько интересных:
нл -н рз
нл -н рз
и
nl -w 3 -s ''
nl -w 3 -s ''