Команда Linux nl
1. Обзор команды nl
nlЭто простой, но практичный инструмент командной строки в системе Linux, его полное название — "number lines" (нумерация строк). Его основная функция — читать содержимое файла, добавлять номер строки к каждой строке и затем выводить результат в стандартный вывод.
1.1 Зачем нужна команда nl?
В повседневной разработке или системном администрировании нам часто нужно:
- Быстро просматривать определённые строки кода или лог-файлы
- Удобно ссылаться на конкретные номера строк при обсуждении содержимого файла
- Нумеровать содержимое файла для последующей обработки
- Создавать документы или отчёты с номерами строк
Хотяcat -nтакже может обеспечить аналогичную функциональность, ноnlпредоставляет более широкие возможности управления нумерацией строк, которые могут удовлетворить более сложные потребности.
2. Базовый синтаксис и параметры
2.1 Базовый формат команды
Пример
2.2 Описание общих опций
| Опция | Описание |
|---|---|
-b |
Задать правило вычисления номера строки (за которым следует стиль) |
-i |
Задать приращение номера строки (по умолчанию 1) |
-n |
Задать формат номера строки (с выравниванием по левому краю/по правому краю/без дополнения нулями) |
-s |
Задать разделитель между номером строки и содержимым |
-v |
Задать начальный номер строки (по умолчанию 1) |
-w |
Задать ширину поля номера строки (количество символов) |
-p |
Не сбрасывать номера строк при разрывах страниц |
2.3 Правила расчёта номеров строк (опция -b)
-bПосле опции могут следовать следующие стили:
| Style | Описание |
|---|---|
a |
Нумеровать все строки |
t |
Нумеровать только непустые строки (по умолчанию) |
n |
Не нумеровать |
p正则表达式 |
Нумеровать только строки, соответствующие регулярному выражению |
3. Демонстрация практических примеров
3.1 Базовое использование: добавление номеров строк в файл
Пример
nl example.txt
# Добавить номера строк ко всем строкам (включая пустые строки)
nl -b a example.txt
3.2 Настройка формата нумерации строк
Пример
nl -n rz -w 3 example.txt
# Использовать "|" в качестве разделителя, номера строк выровнены по левому краю
nl -s " | " -n ln example.txt
3.3 Расширенные правила нумерации
Пример
nl -v 10 -i 2 example.txt
# Нумеровать только строки, содержащие "error"
nl -b perror example.log
3.4 Обработка нескольких файлов
Пример
nl file1.txt file2.txt
# Нумеровать каждый файл отдельно
nl -p file1.txt file2.txt
4. Сравнение с другими командами
4.1 nl vs cat -n
| Характеристика | nl | cat -n |
|---|---|---|
| Поведение по умолчанию | Нумеровать только непустые строки | Нумеровать все строки |
| Управление форматом | Расширенный (выравнивание, ширина, разделитель и т. д.) | Ограниченно |
| Правила нумерации | Настраиваемый (сопоставление с регулярными выражениями и т. д.) | Фиксированные |
| Производительность | Немного медленнее | Немного быстрее |
4.2 nl vs grep -n
grep -nОн также содержит номера строк, но его основное назначение — поиск, а номера строк — всего лишь дополнительная информация.nlnl, с другой стороны, — это инструмент, специально оптимизированный для отображения номеров строк.
5. Практические сценарии применения
5.1 Обзор кода
Пример
nl -w 3 -n rz source.py⟧2⟧numbered_source > numbered_source.txt
5.2 Анализ логов
Пример
nl -b pERROR app.log | less
5.3 Обработка документов
Пример
nl -s ". " -w 2 -n rz README.md
6. Заметки и советы
- Обработка пустых строк: По умолчанию,
nlпустые строки пропускаются; используйте-b aчтобы принудительно пронумеровать все строки. - Обработка больших файлов: Для очень больших файлов рассмотрите объединение
lessилиheadчтобы использовать - Использование в конвейере: Он может принимать стандартный ввод, например
cat file | nl - Согласованность формата: Рекомендуется использовать фиксированный набор параметров в скриптах, чтобы обеспечить единообразный формат вывода.
- Соображения производительности: Для простых задач нумерации строк,
cat -nможет быть быстрее.
7. Резюме и упражнения
7.1 Практические задания
- Создайте тестовый файл
test.txtСодержит 5 строк текста и 2 пустые строки - Используйте
nlчтобы отобразить все номера строк (включая пустые строки) - Установите нумерацию строк так, чтобы она начиналась с 100 с шагом 5
- Используйте "::" в качестве разделителя и ширину номера строки 4
- Перенаправьте результат в
numbered.txt
7.2 Эталонные ответы
Пример
echo -e "Первая строка\n\nВторая строка\nТретья строка\n\nЧетвёртая строка\nПятая строка" > test.txt
# Выполните команду nl
nl -b a -v 100 -i 5 -s "::" -w 4 test.txt > numbered.txt
# Просмотреть результат
cat numbered.txt
Справочник команд Linux