Introduction
Ce tutoriel vous présente la commande nl sous Linux, qui permet de numéroter les lignes des fichiers texte. Vous découvrirez comment l’utiliser dans différents cas afin de repérer et de citer plus facilement des lignes précises dans un document. Cette compétence est particulièrement utile aux développeurs, aux administrateurs système et à toute personne amenée à travailler régulièrement avec des fichiers texte.
Imaginez que vous soyez un jeune développeur logiciel affecté à votre premier projet d’envergure. Votre responsable vous demande d’examiner un fichier de configuration et de discuter de certaines sections précises. La commande nl vous permettra de citer facilement les lignes concernées et de rendre vos échanges avec l’équipe plus efficaces.
Comprendre la commande nl de base
Dans cette étape, vous allez examiner un fichier de configuration exemple à l’aide de la commande nl.
Commencez par accéder au répertoire du projet. Saisissez la commande suivante, puis appuyez sur Entrée :
cd /home/labex/project
Cette commande place le répertoire courant dans /home/labex/project, où se trouvent nos fichiers d’exemple.
Utilisez maintenant la commande nl pour afficher le contenu de config.txt avec les numéros de ligne. Saisissez :
nl config.txt | tee nl-basic.txt
Vous devriez obtenir un résultat similaire à celui-ci :
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
...
Voici ce qui se passe :
- La commande
nlajoute le numéro de chaque ligne à gauche du contenu du fichier. - Remarquez que les numéros sont alignés à droite dans une colonne de 6 caractères.
- La ligne vide (la ligne 4 du fichier d’origine) n’est pas numérotée par défaut.
- La commande
teeaffiche le résultat et l’enregistre dansnl-basic.txt.
Cette numérotation permet de citer facilement des lignes précises lorsque vous échangez avec vos collègues. Vous pouvez par exemple dire : « Regardons la ligne 2 pour vérifier le numéro de port. »
Si le résultat obtenu est différent ou si une erreur se produit, vérifiez que vous vous trouvez bien dans le répertoire (/home/labex/project) et que le fichier config.txt existe. Vous pouvez utiliser la commande ls pour afficher la liste des fichiers du répertoire courant.
Numéroter toutes les lignes, y compris les lignes vides
Dans cette étape, vous allez numéroter toutes les lignes, y compris les lignes vides. Cette méthode est utile lorsque vous devez faire référence à des lignes vides ou lorsque celles-ci ont une importance particulière dans le fichier. Pour cela, nous allons utiliser l’option -b a.
Exécutez la commande suivante :
nl -b a config.txt | tee nl-all-lines.txt
Vous devriez maintenant obtenir un résultat similaire à celui-ci :
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
...
Examinons le fonctionnement de cette commande :
- L’option
-bcontrôle la numérotation des lignes dans le corps du fichier. - L’argument
asignifie « all » et indique ànlde numéroter toutes les lignes, y compris les lignes vides. - La ligne 4, qui était auparavant vide et non numérotée, possède désormais un numéro.
- La commande
teeaffiche le résultat et l’enregistre dansnl-all-lines.txt.
Cette option est particulièrement pratique lorsque vous devez citer des lignes vides dans vos échanges ou lorsque vous travaillez avec des fichiers où les lignes vides ont une signification, comme certains fichiers de code ou de configuration.
Si la ligne vide n’est pas numérotée, vérifiez que vous avez bien inclus l’option -b a dans la commande.
Personnaliser le format des numéros
Dans cette étape, vous allez personnaliser l’affichage des numéros de ligne. Cela peut améliorer la lisibilité ou faciliter le traitement du résultat par d’autres commandes. Nous allons aligner les numéros à droite et leur ajouter des zéros en tête.
Utilisez l’option -n rz :
nl -n rz config.txt | tee nl-zero-padded.txt
Le résultat devrait ressembler à ceci :
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
Détaillons l’option -n rz :
-npermet de définir le format de numérotation.rindique un alignement à droite, ce qui correspond d’ailleurs au comportement par défaut.zajoute des zéros en tête des numéros.- La commande
teeaffiche le résultat et l’enregistre dansnl-zero-padded.txt.
Ce format est particulièrement utile lorsque vous devez trier ou traiter le résultat avec d’autres commandes, car sa largeur fixe garantit un alignement régulier.
Si le résultat ne correspond pas à l’exemple, vérifiez que la commande a été saisie correctement, notamment l’option -n rz.
Numéroter certains types de lignes
Dans cette étape, vous allez utiliser nl pour numéroter uniquement certains types de lignes. Cette possibilité est très utile dans les fichiers complexes lorsque vous souhaitez vous concentrer sur des lignes précises. Nous allons numéroter uniquement les lignes non vides qui ne commencent pas par le caractère #, généralement utilisé pour les commentaires dans les fichiers de configuration.
Utilisez la commande suivante :
nl -b p'^[^#]' config.txt | tee nl-settings-only.txt
Vous devriez obtenir un résultat similaire à celui-ci :
## 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
Décomposons cette commande plus complexe :
-b pindique ànlde numéroter uniquement les lignes correspondant à un motif précis.'^[^#]'est une expression régulière :^signifie « début de la ligne » ;[^#]signifie « tout caractère autre que#» ;- ensemble, ces éléments correspondent à toute ligne qui ne commence pas par
#.
- La commande
teeaffiche le résultat et l’enregistre dansnl-settings-only.txt.
Cette commande est utile lorsque vous souhaitez vous concentrer sur les paramètres actifs en ignorant les commentaires. Elle est particulièrement pratique dans les fichiers de configuration volumineux, lorsqu’il faut repérer rapidement les paramètres réellement utilisés et pouvoir les citer.
Si le résultat ne correspond pas à l’exemple, vérifiez attentivement que la commande a été saisie exactement comme indiqué, notamment les guillemets simples autour du motif.
Combiner des options pour une numérotation avancée
Dans cette étape, vous allez combiner plusieurs options de nl afin de créer un schéma de numérotation plus élaboré. Vous allez numéroter toutes les lignes, utiliser un format personnalisé et définir la largeur du champ de numérotation.
Exécutez la commande suivante :
nl -b a -n rz -s ': ' -w 3 config.txt | tee nl-combined.txt
Cette commande effectue les opérations suivantes :
-b a: numérote toutes les lignes, y compris les lignes vides ;-n rz: aligne les numéros à droite et ajoute des zéros en tête ;-s ': ': utilise:comme séparateur entre le numéro et le contenu de la ligne ;-w 3: définit la largeur du champ de numérotation à 3 caractères.
Vous devriez obtenir un résultat similaire à celui-ci :
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
Voici ce qui se passe :
- Toutes les lignes sont numérotées, y compris les lignes vides.
- Les numéros sont alignés à droite et complétés par des zéros en tête.
- Le séparateur entre le numéro et le contenu de la ligne est
:. - La largeur du champ de numérotation est fixée à 3 caractères.
- Le résultat affiché est enregistré dans
nl-combined.txt.
Ce schéma de numérotation avancé peut être très utile lorsque vous travaillez avec des fichiers de configuration structurés ou des documents organisés en sections distinctes. Il permet de citer facilement les lignes à l’intérieur de chaque section.
Si votre résultat diffère de l’exemple, vérifiez soigneusement la commande saisie, en portant une attention particulière aux espaces et aux caractères spéciaux.
Résumé
Dans ce tutoriel, nous avons étudié la commande nl et ses différentes options pour numéroter les lignes des fichiers texte. Nous avons appris à :
- utiliser la commande
nlde base pour ajouter des numéros de ligne à un fichier ; - numéroter toutes les lignes, y compris les lignes vides, avec l’option
-b a; - personnaliser le format des numéros avec l’option
-n rz; - numéroter certains types de lignes à l’aide de motifs ;
- combiner plusieurs options pour créer des schémas de numérotation avancés.
Ces compétences vous aideront à parcourir et à citer les lignes de fichiers de configuration, de code source ou de tout autre fichier texte utilisé dans vos projets de développement.
Voici d’autres options de la commande nl qui n’ont pas été abordées dans ce tutoriel :
-v NUM: commence la numérotation à partir de NUM au lieu de 1 ;-i NUM: incrémente les numéros de NUM au lieu de 1 ;-l NUM: regroupe NUM lignes et ne numérote que la première ligne de chaque groupe ;-f a: numérote toutes les lignes d’en-tête, c’est-à-dire les lignes situées avant la première ligne du corps.
Ces options offrent encore davantage de souplesse lors de l’utilisation de la commande nl.



