nl
Пронумеровать строки — все, только непустые или по шаблону, со своим форматом номера
nl (number lines) печатает файл с номерами строк. В отличие от cat -n, им управляют тонко: какие строки нумеровать (все, непустые, подходящие под регулярку), с какого числа и с каким шагом, какой ширины номер, с нулями или без, что ставить после номера.
Синтаксис
nl [опции] [файл…]
Без файлов или с - читает стандартный ввод. Несколько файлов нумеруются сквозь, как один.
Опции
Какие строки нумеровать
| Опция | Что делает |
|---|---|
-b a | нумеровать все строки, включая пустые |
-b t | только непустые (по умолчанию). Строка из одних пробелов считается непустой |
-b n | не нумеровать ничего |
-b p'регулярка' | только строки, подходящие под базовую регулярку (BRE), например -b p'^#' |
-l N | с -b a: группа из N пустых строк подряд считается одной строкой, номер получает только каждая N-я |
Формат номера
| Опция | Что делает |
|---|---|
-n rn | по правому краю, без нулей (по умолчанию): 1 |
-n ln | по левому краю: 1 |
-n rz | по правому краю с ведущими нулями: 000001 |
-w N | ширина поля номера (по умолчанию 6) |
-s СТРОКА | что ставить после номера (по умолчанию табуляция), например -s '. ' |
-v N | первый номер (по умолчанию 1) |
-i N | шаг (по умолчанию 1) |
Ненумерованные строки получают вместо номера пробелы той же ширины, поэтому текст остаётся выровненным.
Логические страницы
nl понимает разметку «страниц»: строка \:\:\: начинает заголовок, \:\: — тело, \: — подвал. Сами строки-разделители заменяются пустыми, а нумерация на каждой странице начинается заново.
| Опция | Что делает |
|---|---|
-h СТИЛЬ | как нумеровать заголовок (по умолчанию n — никак) |
-f СТИЛЬ | как нумеровать подвал (по умолчанию n) |
-p | не сбрасывать номер на новой странице |
-d СИМВОЛЫ | другие символы разделителя вместо \:; -d '' отключает разметку страниц |
СТИЛЬ — те же значения, что у -b: a, t, n, pРЕГУЛЯРКА.
Примеры
printf 'one\n\ntwo\n# note\nthree\n' > notes.txt
# по умолчанию: пустые строки без номера
nl notes.txt
# все строки, как cat -n
nl -b a notes.txt
# только комментарии
nl -b p'^#' notes.txt
# компактно: «1. текст»
nl -w1 -s'. ' notes.txt
# с ведущими нулями, ширина 3
nl -n rz -w3 notes.txt
# начать с 100, шаг 10
nl -v 100 -i 10 notes.txt
# пронумеровать вывод команды
ls /etc | head -n 5 | nl
# номер строки для grep-подобного поиска — через nl и grep
nl -b a notes.txt | grep two
Подводные камни
- По умолчанию пустые строки не нумеруются, поэтому номер из
nlможет не совпасть с номером строки в файле (как вsed -n 5pилиgrep -n). Для настоящих номеров строк используйnl -b aилиcat -n. - Строка
\:в данных съедается.nlпринимает её за разметку страницы: строка исчезает (заменяется пустой), а следующие строки попадают в «подвал» и перестают нумероваться. Если в тексте могут встретиться такие строки, добавь-d ''. -w— минимальная ширина, а не обрезка. Номер12при-w1всё равно выведется целиком, просто текст после него перестанет быть выровненным.- Ширина и разделитель вместе. С
-n lnпробелы-заполнители идут после номера и до разделителя:-n ln -w2 -s'. 'даёт1 . текст. Для формата1. текстбери-w1. -b p— базовые регулярки (BRE).+,?,|без обратного слэша там обычные символы. Подробнее — на странице про регулярки.- Строка из пробелов — не пустая.
-b tеё пронумерует; пустой считается только строка совсем без символов.