Введение
В этом практическом занятии (лабораторной работе) вы научитесь использовать команду Linux nl для добавления номеров строк в текстовые файлы. Нумерация строк является полезной техникой при работе с конфигурационными файлами, кодом или любым текстовым документом, где вам нужно ссылаться на определенные строки. Команда nl предоставляет различные параметры для настройки формата нумерации, что делает ее гибким инструментом для различных потребностей в документировании и обработке.
К концу этого практического занятия вы поймете, как применять базовые и продвинутые техники нумерации строк к текстовым файлам, что повысит ваши навыки обработки текста в Linux.
Создание примерного текстового файла
На этом этапе вы создадите примерный текстовый файл, который будете использовать на протяжении всей практической работы (лабораторной работы) для практики нумерации строк.
Сначала проверим текущую рабочую директорию. По умолчанию вы должны находиться в директории /home/labex/project. Вы можете подтвердить это с помощью команды pwd:
pwd
Вы должны увидеть следующий вывод:
/home/labex/project
Теперь создадим простой текстовый файл с именем sample.txt с использованием текстового редактора nano. Введите следующую команду, чтобы открыть nano:
nano sample.txt
Внутри редактора nano введите следующее содержимое:
Linux Commands
-------------
cat - display file contents
ls - list directory contents
cd - change directory
grep - search for patterns
chmod - change file permissions
Чтобы сохранить файл и выйти из nano:
- Нажмите
Ctrl+X(для выхода) - Нажмите
Y(чтобы подтвердить, что вы хотите сохранить изменения) - Нажмите
Enter(чтобы подтвердить имя файла)
Теперь убедитесь, что файл был создан, отобразив его содержимое:
cat sample.txt
Вы должны увидеть в терминале точно такой же текст, который вы ввели.
Базовая нумерация строк с использованием команды nl
Теперь, когда вы создали примерный текстовый файл, давайте научимся добавлять номера строк с помощью команды nl. Команда nl в Linux используется для нумерации строк в файле, что может быть полезно для упрощения ссылки на них.
Давайте используем базовую команду nl для нумерации всех строк в вашем примерном файле:
nl sample.txt
Вы должны увидеть вывод, похожий на следующий:
1 Linux Commands
2 -------------
3 cat - display file contents
4 ls - list directory contents
5 cd - change directory
6 grep - search for patterns
7 chmod - change file permissions
Обратите внимание, что команда nl добавляет номера строк в начале каждой строки. Это поведение команды nl по умолчанию.
Если вы хотите сохранить этот нумерованный вывод в новый файл, вы можете использовать перенаправление вывода с помощью символа >:
nl sample.txt > numbered_sample.txt
Эта команда создает новый файл с именем numbered_sample.txt, содержащий версию вашего исходного файла с нумерованными строками. Давайте проверим содержимое этого нового файла:
cat numbered_sample.txt
Вы должны увидеть тот же нумерованный вывод, что и раньше, теперь сохраненный в файле.
Базовая команда nl полезна, но иногда вам может понадобиться настроить внешний вид нумерации строк. На следующем этапе мы рассмотрим некоторые параметры настройки.
Настройка формата нумерации строк
Команда nl предоставляет различные параметры для настройки внешнего вида номеров строк. На этом этапе вы узнаете, как изменить формат нумерации строк в соответствии с различными потребностями.
Стартовый номер
По умолчанию нумерация строк начинается с 1. Вы можете изменить это с помощью параметра -v (начальное значение). Давайте пронумеруем строки, начиная с 100:
nl -v 100 sample.txt > custom_start.txt
Посмотрите на результат:
cat custom_start.txt
Вы должны увидеть вывод с номерами строк, начиная с 100:
100 Linux Commands
101 -------------
102 cat - display file contents
103 ls - list directory contents
104 cd - change directory
105 grep - search for patterns
106 chmod - change file permissions
Формат номера
Вы также можете контролировать формат номера с помощью параметра -n. Спецификаторы формата включают:
ln: выравнивание по левому краю, без ведущих нулейrn: выравнивание по правому краю, без ведущих нулейrz: выравнивание по правому краю, с ведущими нулями
Давайте попробуем номера, выровненные по правому краю с ведущими нулями:
nl -n rz sample.txt > zero_padded.txt
Посмотрите на результат:
cat zero_padded.txt
Вы должны увидеть вывод, похожий на следующий:
000001 Linux Commands
000002 -------------
000003 cat - display file contents
000004 ls - list directory contents
000005 cd - change directory
000006 grep - search for patterns
000007 chmod - change file permissions
Ширина поля номера
Вы можете контролировать ширину поля номера с помощью параметра -w. По умолчанию она составляет 6 символов. Давайте установим ее равной 3:
nl -w 3 sample.txt > narrow_numbers.txt
Посмотрите на результат:
cat narrow_numbers.txt
Вы должны увидеть вывод с более узким полем номера:
1 Linux Commands
2 -------------
3 cat - display file contents
4 ls - list directory contents
5 cd - change directory
6 grep - search for patterns
7 chmod - change file permissions
Попробуйте комбинировать несколько параметров:
nl -v 10 -w 4 -n rz sample.txt > combined_format.txt
Эта команда:
- Начинает нумерацию с 10 (
-v 10) - Устанавливает ширину в 4 символа (
-w 4) - Использует формат с выравниванием по правому краю и ведущими нулями (
-n rz)
Посмотрите на комбинированный результат:
cat combined_format.txt
Вы должны увидеть настроенную нумерацию строк:
0010 Linux Commands
0011 -------------
0012 cat - display file contents
0013 ls - list directory contents
0014 cd - change directory
0015 grep - search for patterns
0016 chmod - change file permissions
Эти параметры настройки предоставляют вам гибкость в отображении номеров строк в ваших документах.
Выборочная нумерация строк
Иногда может потребоваться пронумеровать только определенные строки в файле, а не все. Команда nl предлагает опции для выборочной нумерации строк на основе определенных критериев.
Создание файла с пустыми строками
Сначала давайте создадим новый файл, который включает пустые строки:
nano mixed_content.txt
В редакторе nano введите следующее содержимое (включая пустые строки):
Section 1: File Operations
cat - display file contents
less - view file content with pagination
Section 2: Navigation
cd - change directory
pwd - print working directory
Section 3: Permissions
chmod - change file permissions
chown - change file ownership
Сохраните файл, нажав Ctrl+X, затем Y и Enter.
Нумерация только непустых строк
По умолчанию nl нумерует все строки. Чтобы пронумеровать только непустые строки, используйте опцию -b t:
nl -b t mixed_content.txt > numbered_nonempty.txt
Просмотрите результат:
cat numbered_nonempty.txt
Вы должны увидеть, что пронумерованы только непустые строки:
1 Section 1: File Operations
2 cat - display file contents
3 less - view file content with pagination
4 Section 2: Navigation
5 cd - change directory
6 pwd - print working directory
7 Section 3: Permissions
8 chmod - change file permissions
9 chown - change file ownership
Нумерация только строк, соответствующих шаблону (Pattern)
Вы также можете пронумеровать только строки, которые соответствуют определенному шаблону, используя опцию -b p'PATTERN'. Например, чтобы пронумеровать только строки, содержащие слово "Section":
nl -b p'Section' mixed_content.txt > numbered_sections.txt
Просмотрите результат:
cat numbered_sections.txt
Вы должны увидеть, что пронумерованы только строки, содержащие "Section":
1 Section 1: File Operations
cat - display file contents
less - view file content with pagination
2 Section 2: Navigation
cd - change directory
pwd - print working directory
3 Section 3: Permissions
chmod - change file permissions
chown - change file ownership
Настройка разделителя (Separator)
Разделителем по умолчанию между номером строки и текстом является табуляция (tab). Вы можете изменить это с помощью опции -s:
nl -s '. ' mixed_content.txt > custom_separator.txt
Просмотрите результат:
cat custom_separator.txt
Вы должны увидеть номера строк, за которыми следует точка и пробел:
1. Section 1: File Operations
2. cat - display file contents
3. less - view file content with pagination
4. Section 2: Navigation
5. cd - change directory
6. pwd - print working directory
7. Section 3: Permissions
8. chmod - change file permissions
9. chown - change file ownership
Эти параметры выборочной нумерации позволяют применять номера строк только там, где это необходимо, делая ваши документы более организованными и удобными для ссылок.
Практические применения и продвинутое использование
На этом последнем этапе мы рассмотрим некоторые практические применения и расширенное использование команды nl в реальных сценариях.
Нумерация нескольких файлов
Команда nl может обрабатывать несколько файлов одновременно. Создадим второй файл:
nano commands2.txt
Добавьте следующее содержимое:
Additional Linux Commands
------------------------
find - search for files
tar - archive files
ssh - secure shell connection
df - disk free space
top - display system processes
Сохраните файл и выйдите из nano. Теперь пронумеруем оба файла вместе:
nl sample.txt commands2.txt > combined_numbered.txt
Посмотрите на объединенный результат:
cat combined_numbered.txt
Вы должны увидеть, что оба файла пронумерованы последовательно:
1 Linux Commands
2 -------------
3 cat - display file contents
4 ls - list directory contents
5 cd - change directory
6 grep - search for patterns
7 chmod - change file permissions
1 Additional Linux Commands
2 ------------------------
3 find - search for files
4 tar - archive files
5 ssh - secure shell connection
6 df - disk free space
7 top - display system processes
Обратите внимание, что нумерация строк для второго файла начинается заново. Если вы хотите, чтобы нумерация была непрерывной между файлами, можно использовать параметр -i:
nl -i 1 -n ln sample.txt commands2.txt > continuously_numbered.txt
Посмотрите на результат:
cat continuously_numbered.txt
Вы должны увидеть непрерывную нумерацию для обоих файлов:
1 Linux Commands
2 -------------
3 cat - display file contents
4 ls - list directory contents
5 cd - change directory
6 grep - search for patterns
7 chmod - change file permissions
8 Additional Linux Commands
9 ------------------------
10 find - search for files
11 tar - archive files
12 ssh - secure shell connection
13 df - disk free space
14 top - display system processes
Комбинирование с другими командами
Команда nl может быть объединена с другими командами Linux с использованием конвейеров (pipes). Например, можно пронумеровать строки вывода команды:
ls -l /etc | nl > numbered_ls_output.txt
Посмотрите на результат:
cat numbered_ls_output.txt
Вы должны увидеть вывод команды ls -l /etc с добавленными номерами строк.
Реальный случай использования: добавление номеров строк в лог-файл
Нумерация строк особенно полезна при анализе лог-файлов. Посмотрим, как можно использовать nl для добавления номеров строк в логи:
## First, create a sample log file
cat > sample_log.txt << EOF
[2023-07-01 10:15:22] INFO: System startup
[2023-07-01 10:15:24] INFO: Loading configuration
[2023-07-01 10:15:25] WARNING: Config file is outdated
[2023-07-01 10:15:28] ERROR: Failed to connect to database
[2023-07-01 10:15:30] INFO: Retrying database connection
[2023-07-01 10:15:33] INFO: Database connection established
[2023-07-01 10:15:35] INFO: System ready
EOF
Теперь добавим номера строк с пользовательским форматом, включающим номер строки в квадратных скобках:
nl -s ' [Line: ' -n ln -w 2 -b a sample_log.txt | sed 's/$/]/' > numbered_log.txt
Эта команда:
- Использует пользовательский разделитель
-s ' [Line: ' - Использует числа, выровненные по левому краю без ведущих нулей
-n ln - Устанавливает ширину в 2 символа
-w 2 - Нумерует все строки
-b a - Использует
sedдля добавления закрывающей квадратной скобки в конце каждой строки
Посмотрите на результат:
cat numbered_log.txt
Вы должны увидеть записи лога с номерами строк в квадратных скобках:
1 [Line: [2023-07-01 10:15:22] INFO: System startup]
2 [Line: [2023-07-01 10:15:24] INFO: Loading configuration]
3 [Line: [2023-07-01 10:15:25] WARNING: Config file is outdated]
4 [Line: [2023-07-01 10:15:28] ERROR: Failed to connect to database]
5 [Line: [2023-07-01 10:15:30] INFO: Retrying database connection]
6 [Line: [2023-07-01 10:15:33] INFO: Database connection established]
7 [Line: [2023-07-01 10:15:35] INFO: System ready]
Такой формат может быть очень полезен при ссылке на конкретные записи лога в документации или обсуждениях.
Теперь вы хорошо понимаете, как использовать команду nl для базовой и расширенной нумерации строк в Linux. Этот навык будет ценным при работе с текстовыми файлами, логами, кодом и документацией.
Резюме
В этом практическом занятии вы узнали, как использовать команду Linux nl для добавления номеров строк в текстовые файлы. Вот краткое изложение основных концепций, которые были рассмотрены:
- Базовая нумерация строк с использованием простой команды
nl - Настройка формата нумерации строк с помощью таких параметров, как
-v(начальное значение),-n(формат номера) и-w(ширина) - Выборочная нумерация строк с использованием таких параметров, как
-b t(только непустые строки) и-b p'PATTERN'(соответствие шаблону) - Настройка разделителя между номерами строк и текстом с помощью параметра
-s - Работа с несколькими файлами и создание непрерывной нумерации между файлами
- Комбинирование команды
nlс другими командами с использованием конвейеров (pipes) - Практические применения, такие как нумерация лог-файлов для более удобной ссылки
Команда nl является ценным инструментом для обработки текста в Linux, особенно когда вам нужно ссылаться на конкретные строки в документации, при рецензировании кода или при анализе лог-файлов. Освоив различные параметры команды nl, вы получили мощный метод для улучшения читаемости и удобства использования текстовых данных.
По мере продолжения вашего пути в Linux помните, что команды для обработки текста, такие как nl, в сочетании с другими инструментами, являются основой для эффективной манипуляции файлами и обработки данных в среде Linux.



