Commande Linux nl : numérotation des lignes

LinuxBeginner
Pratiquer maintenant

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 nl ajoute 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 tee affiche le résultat et l’enregistre dans nl-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 -b contrôle la numérotation des lignes dans le corps du fichier.
  • L’argument a signifie « all » et indique à nl de 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 tee affiche le résultat et l’enregistre dans nl-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 :

  • -n permet de définir le format de numérotation.
  • r indique un alignement à droite, ce qui correspond d’ailleurs au comportement par défaut.
  • z ajoute des zéros en tête des numéros.
  • La commande tee affiche le résultat et l’enregistre dans nl-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 p indique à nl de 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 tee affiche le résultat et l’enregistre dans nl-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 à :

  1. utiliser la commande nl de base pour ajouter des numéros de ligne à un fichier ;
  2. numéroter toutes les lignes, y compris les lignes vides, avec l’option -b a ;
  3. personnaliser le format des numéros avec l’option -n rz ;
  4. numéroter certains types de lignes à l’aide de motifs ;
  5. 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.