Introduction
In this lab, you will learn how to use the Linux nl command to add line numbers to text files. Line numbering is a useful technique when working with configuration files, code, or any text document where you need to reference specific lines. The nl command provides various options to customize the numbering format, making it a flexible tool for different documentation and processing needs.
By the end of this lab, you will understand how to apply basic and advanced line numbering techniques to text files, which will enhance your text processing skills in Linux.
Creating a Sample Text File
In this step, you will create a sample text file that you will use throughout this lab to practice line numbering.
First, let's verify your current working directory. By default, you should be in the /home/labex/project directory. You can confirm this with the pwd command:
pwd
You should see the following output:
/home/labex/project
Now, let's create a simple text file named sample.txt using the nano text editor. Type the following command to open nano:
nano sample.txt
Inside the nano editor, type the following content:
Linux Commands
-------------
cat - display file contents
ls - list directory contents
cd - change directory
grep - search for patterns
chmod - change file permissions
To save the file and exit nano:
- Press
Ctrl+X(to exit) - Press
Y(to confirm you want to save changes) - Press
Enter(to confirm the filename)
Now, verify that your file has been created by displaying its contents:
cat sample.txt
You should see the exact text you entered displayed in the terminal.
Basic Line Numbering with nl
Now that you have created a sample text file, let's learn how to add line numbers using the nl command. The nl command in Linux is used to number lines in a file, which can be helpful for reference purposes.
Let's use the basic nl command to number all lines in your sample file:
nl sample.txt
You should see output similar to the following:
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
Notice that the nl command adds line numbers at the beginning of each line. This is the default behavior of the nl command.
If you want to save this numbered output to a new file, you can use output redirection with the > symbol:
nl sample.txt > numbered_sample.txt
This command creates a new file named numbered_sample.txt containing the line-numbered version of your original file. Let's verify the content of this new file:
cat numbered_sample.txt
You should see the same numbered output as before, now saved in a file.
The basic nl command is useful, but sometimes you may need to customize how the line numbering appears. In the next step, we'll explore some customization options.
Customizing Line Numbering Format
The nl command offers various options to customize how line numbers appear. In this step, you'll learn how to modify the line numbering format to suit different needs.
Starting Number
By default, line numbering starts from 1. You can change this with the -v (starting value) option. Let's number the lines starting from 100:
nl -v 100 sample.txt > custom_start.txt
View the result:
cat custom_start.txt
You should see output with line numbers starting from 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
Number Format
You can also control the number format using the -n option. The format specifiers include:
ln: left justified, no leading zerosrn: right justified, no leading zerosrz: right justified, with leading zeros
Let's try right-justified numbers with leading zeros:
nl -n rz sample.txt > zero_padded.txt
View the result:
cat zero_padded.txt
You should see output like:
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
Width of Number Field
You can control the width of the number field with the -w option. By default, it's 6 characters wide. Let's set it to 3:
nl -w 3 sample.txt > narrow_numbers.txt
View the result:
cat narrow_numbers.txt
You should see output with a narrower number field:
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
Try combining multiple options:
nl -v 10 -w 4 -n rz sample.txt > combined_format.txt
This command:
- Starts numbering from 10 (
-v 10) - Sets width to 4 characters (
-w 4) - Uses right-justified zero-padded format (
-n rz)
View the combined result:
cat combined_format.txt
You should see customized line numbering:
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
These customization options give you flexibility in how line numbers appear in your documents.
Selective Line Numbering
Sometimes you may only want to number certain lines in a file, not all of them. The nl command offers options to selectively number lines based on specific criteria.
Create a File with Blank Lines
First, let's create a new file that includes blank lines:
nano mixed_content.txt
In the nano editor, enter the following content (including the blank lines):
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
Save the file by pressing Ctrl+X, then Y, and Enter.
Number Only Non-Empty Lines
By default, nl numbers all lines. To number only non-empty lines, use the -b t option:
nl -b t mixed_content.txt > numbered_nonempty.txt
View the result:
cat numbered_nonempty.txt
You should see that only the non-empty lines have been numbered:
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
Number Only Lines Matching a Pattern
You can also number only lines that match a specific pattern using the -b p'PATTERN' option. For example, to number only lines containing the word "Section":
nl -b p'Section' mixed_content.txt > numbered_sections.txt
View the result:
cat numbered_sections.txt
You should see that only lines containing "Section" are numbered:
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
Customize the Separator
The default separator between the line number and the text is a tab. You can change this using the -s option:
nl -s '. ' mixed_content.txt > custom_separator.txt
View the result:
cat custom_separator.txt
You should see line numbers followed by a period and a space:
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
These selective numbering options allow you to apply line numbers only where they're needed, making your documents more organized and easier to reference.
Practical Applications and Advanced Usage
In this final step, we'll explore some practical applications and advanced usage of the nl command in real-world scenarios.
Numbering Multiple Files
The nl command can process multiple files at once. Let's create a second file:
nano commands2.txt
Add the following content:
Additional Linux Commands
------------------------
find - search for files
tar - archive files
ssh - secure shell connection
df - disk free space
top - display system processes
Save and exit nano. Now let's number both files together:
nl sample.txt commands2.txt > combined_numbered.txt
View the combined result:
cat combined_numbered.txt
You should see both files numbered sequentially:
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
Notice that the line numbers restart for the second file. If you want continuous numbering across files, you can use the -i option:
nl -i 1 -n ln sample.txt commands2.txt > continuously_numbered.txt
View the result:
cat continuously_numbered.txt
You should see continuous numbering across both files:
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
Combining with Other Commands
The nl command can be combined with other Linux commands using pipes. For example, you can number the lines of command output:
ls -l /etc | nl > numbered_ls_output.txt
View the result:
cat numbered_ls_output.txt
You should see the output of ls -l /etc with added line numbers.
Real-World Use Case: Adding Line Numbers to a Log File
Line numbering is especially useful when analyzing log files. Let's see how we can use nl to add line numbers to logs:
## 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
Now, add line numbers with a custom format that includes the line number in brackets:
nl -s ' [Line: ' -n ln -w 2 -b a sample_log.txt | sed 's/$/]/' > numbered_log.txt
This command:
- Uses a custom separator
-s ' [Line: ' - Uses left-justified numbers with no leading zeros
-n ln - Sets the width to 2 characters
-w 2 - Numbers all lines
-b a - Uses
sedto add a closing bracket at the end of each line
View the result:
cat numbered_log.txt
You should see log entries with line numbers in brackets:
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]
This format can be very useful when referencing specific log entries in documentation or discussions.
Now you have a good understanding of how to use the nl command for basic and advanced line numbering in Linux. This skill will be valuable when working with text files, logs, code, and documentation.
Summary
In this lab, you have learned how to use the Linux nl command to add line numbers to text files. Here's a summary of the key concepts covered:
- Basic line numbering using the simple
nlcommand - Customizing the line numbering format with options like
-v(starting value),-n(number format), and-w(width) - Selectively numbering lines with options like
-b t(non-empty lines) and-b p'PATTERN'(pattern matching) - Customizing the separator between line numbers and text with the
-soption - Working with multiple files and creating continuous numbering across files
- Combining
nlwith other commands using pipes - Practical applications such as numbering log files for easier reference
The nl command is a valuable tool for text processing in Linux, especially when you need to reference specific lines in documentation, code reviews, or when analyzing log files. By mastering the various options of nl, you now have a powerful technique to enhance the readability and usability of text-based data.
As you continue your Linux journey, remember that text processing commands like nl, combined with other tools, form the foundation of efficient file manipulation and data processing in the Linux environment.



