← Весь справочник

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 её пронумерует; пустой считается только строка совсем без символов.

См. также

cat и tac · grep · sed · регулярки · column · wc