Нумерация строк в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь использовать команду Linux nl для добавления номеров строк в текстовые файлы. Нумерация строк является полезной техникой при работе с конфигурационными файлами, кодом или любым текстовым документом, где вам нужно ссылаться на определенные строки. Команда nl предоставляет различные параметры для настройки формата нумерации, что делает ее гибким инструментом для различных потребностей в документировании и обработке.

К концу этого практического занятия вы поймете, как применять базовые и продвинутые техники нумерации строк к текстовым файлам, что повысит ваши навыки обработки текста в Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/nl("Line Numbering") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/pwd("Directory Displaying") linux/TextProcessingGroup -.-> linux/sed("Stream Editing") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/nl -.-> lab-271345{{"Нумерация строк в Linux"}} linux/cat -.-> lab-271345{{"Нумерация строк в Linux"}} linux/pwd -.-> lab-271345{{"Нумерация строк в Linux"}} linux/sed -.-> lab-271345{{"Нумерация строк в Linux"}} linux/nano -.-> lab-271345{{"Нумерация строк в Linux"}} end

Создание примерного текстового файла

На этом этапе вы создадите примерный текстовый файл, который будете использовать на протяжении всей практической работы (лабораторной работы) для практики нумерации строк.

Сначала проверим текущую рабочую директорию. По умолчанию вы должны находиться в директории /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:

  1. Нажмите Ctrl+X (для выхода)
  2. Нажмите Y (чтобы подтвердить, что вы хотите сохранить изменения)
  3. Нажмите 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

Нумерация только строк, соответствующих шаблону

Вы также можете пронумеровать только строки, соответствующие определенному шаблону, используя параметр -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

Настройка разделителя

По умолчанию разделителем между номером строки и текстом является табуляция. Вы можете изменить это с помощью параметра -s:

nl -s '. ' mixed_content.txt > custom_separator.txt

Посмотрите на результат:

cat custom_separator.txt

Вы должны увидеть номера строк, за которыми следуют точка и пробел:

     1. Section 1: File Operations
     2.
     3. cat - display file contents
     4. less - view file content with pagination
     5.
     6. Section 2: Navigation
     7.
     8. cd - change directory
     9. pwd - print working directory
    10.
    11. Section 3: Permissions
    12.
    13. chmod - change file permissions
    14. 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.