Введение
В этом руководстве рассматривается команда nl в Linux, предназначенная для нумерации строк в текстовых файлах. Мы изучим её применение в различных ситуациях, чтобы упростить обращение к конкретным строкам документов. Этот навык особенно полезен программистам, системным администраторам и всем, кто регулярно работает с текстовыми файлами.
Представьте, что вы младший разработчик программного обеспечения и работаете над своим первым крупным проектом. Руководитель команды попросил вас проверить конфигурационный файл и обсудить отдельные его разделы. Команда nl поможет быстро ссылаться на нужные строки и обсуждать их, сделав совместную работу более эффективной.
Знакомство с базовой командой nl
На этом шаге вы изучите пример конфигурационного файла с помощью команды nl.
Сначала перейдите в каталог проекта. Введите следующую команду и нажмите Enter:
cd /home/labex/project
Эта команда изменит текущий каталог на /home/labex/project, где находятся файлы примеров.
Теперь используйте команду nl, чтобы просмотреть содержимое config.txt с номерами строк. Введите:
nl config.txt | tee nl-basic.txt
Вы должны увидеть вывод примерно такого вида:
1 ## Server Configuration
2 port=8080
3 max_connections=100
4
5 ## Database Settings
6 db_host=localhost
7 db_port=5432
8 db_name=myapp
...
Разберём, что здесь происходит:
- Команда
nlдобавляет номера слева от каждой строки файла. - Обратите внимание: номера выровнены по правому краю в столбце шириной 6 символов.
- Пустая строка (строка 4 в исходном файле) по умолчанию не нумеруется.
- Команда
teeвыводит результат на экран и сохраняет его вnl-basic.txt.
Такая нумерация упрощает ссылки на конкретные строки при обсуждении файла с коллегами. Например, можно сказать: «Давайте посмотрим строку 2 и проверим номер порта».
Если вывод отличается или появилась ошибка, убедитесь, что вы находитесь в правильном каталоге (/home/labex/project) и что файл config.txt существует. Проверить это можно с помощью команды ls, которая выводит список файлов в текущем каталоге.
Нумерация всех строк, включая пустые
На этом шаге вы пронумеруете все строки, в том числе пустые. Это полезно, когда необходимо ссылаться на пустые строки или работать с файлами, где пустые строки имеют значение. Для этого воспользуемся параметром -b a.
Выполните следующую команду:
nl -b a config.txt | tee nl-all-lines.txt
Теперь вывод должен выглядеть примерно так:
1 ## Server Configuration
2 port=8080
3 max_connections=100
4
5 ## Database Settings
6 db_host=localhost
7 db_port=5432
8 db_name=myapp
...
Разберём происходящее:
- Параметр
-bуправляет нумерацией строк в основной части файла. - Аргумент
aозначает «все» и указываетnlнумеровать все строки, включая пустые. - Обратите внимание: строка 4, которая раньше оставалась пустой и без номера, теперь получает номер.
- Команда
teeвыводит результат на экран и сохраняет его вnl-all-lines.txt.
Это особенно удобно, когда нужно ссылаться на пустые строки при обсуждении файла или работать с файлами, где пустые строки имеют смысл, например с некоторыми программами и конфигурационными файлами.
Если пустая строка по-прежнему не нумеруется, проверьте, что в команде указан параметр -b a.
Настройка формата нумерации
На этом шаге вы настроите отображение номеров строк. Это может повысить читаемость вывода или подготовить его к дальнейшей обработке. Попробуем выровнять номера по правому краю и добавить ведущие нули.
Используйте параметр -n rz:
nl -n rz config.txt | tee nl-zero-padded.txt
Вывод должен выглядеть следующим образом:
000001 ## Server Configuration
000002 port=8080
000003 max_connections=100
000004 ## Database Settings
000005 db_host=localhost
000006 db_port=5432
000007 db_name=myapp
000008 ### Logging Configuration
000009 log_level=info
000010 log_file=/var/log/myapp.log
000011 ## Security Settings
000012 enable_ssl=true
000013 ssl_cert_path=/etc/ssl/certs/myapp.crt
000014 ### Performance Tuning
000015 cache_size=1024
000016 thread_pool=20
000017 ## Miscellaneous
000018 debug_mode=false
Разберём параметр -n rz:
-nзадаёт формат нумерации.rозначает выравнивание по правому краю (это также используется по умолчанию).zдобавляет ведущие нули.- Команда
teeвыводит результат на экран и сохраняет его вnl-zero-padded.txt.
Такой формат особенно полезен, если результат нужно сортировать или дополнительно обрабатывать другими командами: фиксированная ширина поля обеспечивает единообразное выравнивание.
Если ваш вывод отличается, убедитесь, что команда введена правильно, включая параметр -n rz.
Нумерация определённых типов строк
На этом шаге вы с помощью nl пронумеруете только определённые типы строк. Это особенно полезно при работе со сложными файлами, когда нужно сосредоточиться на конкретных строках. Мы пронумеруем только непустые строки, которые не начинаются с символа # — обычно он обозначает комментарии в конфигурационных файлах.
Используйте следующую команду:
nl -b p'^[^#]' config.txt | tee nl-settings-only.txt
Вы должны увидеть вывод примерно такого вида:
## Server Configuration
1 port=8080
2 max_connections=100
## Database Settings
3 db_host=localhost
4 db_port=5432
5 db_name=myapp
### Logging Configuration
6 log_level=info
7 log_file=/var/log/myapp.log
## Security Settings
8 enable_ssl=true
9 ssl_cert_path=/etc/ssl/certs/myapp.crt
### Performance Tuning
10 cache_size=1024
11 thread_pool=20
## Miscellaneous
12 debug_mode=false
Разберём эту составную команду:
-b pуказываетnlнумеровать только строки, соответствующие определённому шаблону.'^[^#]'— это регулярное выражение:^означает «начало строки»;[^#]означает «любой символ, кроме#»;- вместе они выбирают любую строку, которая не начинается с
#.
- Команда
teeвыводит результат на экран и сохраняет его вnl-settings-only.txt.
Эта команда полезна, когда нужно сосредоточиться на активных параметрах конфигурации и не учитывать комментарии. Она особенно удобна для больших конфигурационных файлов, в которых требуется быстро найти и указать фактические настройки.
Если результат отличается от ожидаемого, проверьте, что команда введена в точности как показано, включая одинарные кавычки вокруг шаблона.
Сочетание параметров для сложной нумерации
На этом шаге вы объедините несколько параметров nl, чтобы создать более сложную схему нумерации. Все строки будут пронумерованы, формат номеров будет изменён, а ширина поля номера задана явно.
Выполните следующую команду:
nl -b a -n rz -s ': ' -w 3 config.txt | tee nl-combined.txt
Эта команда выполняет следующие действия:
-b a: нумерует все строки, включая пустые;-n rz: выравнивает номера по правому краю и добавляет ведущие нули;-s ': ': использует:в качестве разделителя между номером и содержимым строки;-w 3: задаёт ширину поля номера в 3 символа.
Вы должны увидеть вывод примерно такого вида:
001: ## Server Configuration
002: port=8080
003: max_connections=100
004:
005: ## Database Settings
006: db_host=localhost
007: db_port=5432
008: db_name=myapp
009:
010: ### Logging Configuration
011: log_level=info
012: log_file=/var/log/myapp.log
013:
014: ## Security Settings
015: enable_ssl=true
016: ssl_cert_path=/etc/ssl/certs/myapp.crt
017:
018: ### Performance Tuning
019: cache_size=1024
020: thread_pool=20
021:
022: ## Miscellaneous
023: debug_mode=false
Разберём, что происходит:
- Нумеруются все строки, включая пустые.
- Номера выровнены по правому краю и дополнены ведущими нулями.
- Между номером и содержимым строки используется разделитель
:. - Ширина поля номера установлена равной 3 символам.
- Результат сохраняется в
nl-combined.txt.
Такая схема нумерации может быть очень полезна при работе со структурированными конфигурационными файлами или документами, разделёнными на отдельные секции. Она позволяет легко ссылаться на строки внутри нужных разделов.
Если ваш вывод не совпадает с приведённым, внимательно проверьте введённую команду, особенно пробелы и специальные символы.
Итоги
В этом руководстве мы рассмотрели команду nl и её различные параметры для нумерации строк в текстовых файлах. Мы научились:
- Использовать базовую команду
nlдля добавления номеров строк в файл. - Нумеровать все строки, включая пустые, с помощью параметра
-b a. - Настраивать формат номеров с помощью параметра
-n rz. - Нумеровать определённые типы строк, используя сопоставление с шаблоном.
- Объединять несколько параметров для создания сложных схем нумерации.
Эти навыки помогут вам ориентироваться в конфигурационных файлах, исходном коде и любых других текстовых файлах, с которыми вы работаете в рамках проектов разработки, а также ссылаться на конкретные строки.
Другие параметры команды nl, которые не рассматривались в этом руководстве:
-v NUM: начинать нумерацию сNUM, а не с 1;-i NUM: увеличивать номер наNUM, а не на 1;-l NUM: объединять строки в группы поNUMстрок и нумеровать только первую строку каждой группы;-f a: нумеровать все строки заголовка — строки до первой строки основной части файла.
Эти параметры предоставляют ещё больше возможностей при работе с командой nl.



