<Précédent | Table des matières | Suivant>
nl – Lignes numériques
Le nl est un outil plutôt obscur utilisé pour effectuer une tâche simple. Il numérote les lignes. Dans son utilisation la plus simple, il ressemble chat -n:
[moi@linuxbox ~]$ nl distributions.txt | diriger
1 | SUSE | 10.2 | 12/07/2006 |
2 | Fedora | 10 | 11/25/2008 |
3 | SUSE | 11.0 | 06/19/2008 |
4 | Ubuntu | 8.04 | 04/24/2008 |
5 | Fedora | 8 | 11/08/2007 |
6 | SUSE | 10.3 | 10/04/2007 |
7 | Ubuntu | 6.10 | 10/26/2006 |
8 | Fedora | 7 | 05/31/2007 |
9 | Ubuntu | 7.10 | 10/18/2007 |
10 | Ubuntu | 7.04 | 04/19/2007 |
Comme cat, nl peut accepter soit plusieurs fichiers comme arguments de ligne de commande, soit une entrée standard. Cependant, nl a un certain nombre d'options et prend en charge une forme primitive de balisage pour permettre des types de numérotation plus complexes.
nl prend en charge un concept appelé "pages logiques" lors de la numérotation. Cela permet à nl de réinitialiser (de recommencer) la séquence numérique lors de la numérotation. À l'aide d'options, il est possible de définir le numéro de départ sur une valeur spécifique et, dans une mesure limitée, son format. Une page logique est ensuite décomposée en un en-tête, un corps et un pied de page. Dans chacune de ces sections, la numérotation des lignes peut être réinitialisée et/ou se voir attribuer un style différent. Si nl reçoit plusieurs fichiers, il les traite comme un seul flux de texte. Les sections du flux de texte sont indiquées par la présence d'un balisage plutôt étrange ajouté au texte :
Tableau 21-1 : balisage nl
Signification du balisage
Signification du balisage
\:\:\ : Début de l'en-tête de page logique
\:\ : Début du corps de page logique
\ : Début du pied de page logique
Chacun des éléments de balisage ci-dessus doit apparaître seul sur sa propre ligne. Après avoir traité un élément de balisage, nl le supprime du flux de texte.
Voici les options courantes pour nl:
Tableau 21-2 : Options communes nl
Option Signification
Option Signification
-b Catégorie Définir la numérotation du corps sur Catégorie, Où Catégorie est l'un des suivants :
a = numéroter toutes les lignes
t = numéroter uniquement les lignes non vides. C'est la valeur par défaut.
n = aucun
pregexp = nombre uniquement de lignes correspondant à l'expression régulière de base
expression rationnelle.
-f Catégorie Définir la numérotation du pied de page sur Catégorie. La valeur par défaut est n (aucun).
-h Catégorie Définir la numérotation des en-têtes sur Catégorie. La valeur par défaut est n (aucun).
-i nombre Définir l'incrément de numérotation des pages sur nombre. La valeur par défaut est un.
-n le format Définit le format de numérotation sur le format, où format est :
ln = cadré à gauche, sans zéros non significatifs.
rn = justifié à droite, sans zéros non significatifs. C'est la valeur par défaut.
rz = justifié à droite, avec des zéros non significatifs.
-p Ne réinitialise pas la numérotation des pages au début de chaque page logique.
-s un magnifique Ajouter un magnifique à la fin de chaque numéro de ligne pour créer un séparateur.
La valeur par défaut est un caractère de tabulation unique.
-v nombre Définissez le numéro de la première ligne de chaque page logique sur nombre. La valeur par défaut est un.
-w largeur Définir la largeur du champ de numéro de ligne sur largeur. La valeur par défaut est 6.
Certes, nous ne numéroterons probablement pas les lignes aussi souvent, mais nous pouvons utiliser nl pour voir comment nous pouvons combiner plusieurs outils pour effectuer des tâches plus complexes. Nous nous appuierons sur nos travaux du chapitre précédent pour produire un rapport sur les distributions Linux. Puisque nous utiliserons nl, il sera utile d'inclure son balisage d'en-tête/corps/pied de page. Pour ce faire, nous l'ajouterons au sed script du dernier chapitre. À l'aide de notre éditeur de texte, nous allons modifier le script comme suit et l'enregistrer sous distributions-nl.sed:
# script sed pour produire un rapport sur les distributions Linux
1 je\
\\:\\:\\:\
\
Rapport sur les distributions Linux\
\
Nom Ver. Publié\
---- ---- ---------\
\\:\\ :
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ un\
\\:\
\
Fin du rapport
# script sed pour produire un rapport sur les distributions Linux
1 je\
\\:\\:\\:\
\
Rapport sur les distributions Linux\
\
Nom Ver. Publié\
---- ---- ---------\
\\:\\ :
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ un\
\\:\
\
Fin du rapport
Le script insère maintenant le nl balisage de page logique et ajoute un pied de page à la fin du rapport. Notez que nous avons dû doubler les barres obliques inverses dans notre balisage, car elles sont normalement interprétées comme un caractère d'échappement par sed.
Ensuite, nous produirons notre rapport amélioré en combinant sort, sedet une nl:
[moi@linuxbox ~]$ sort -k 1,1 -k 2n distributions.txt | sed -f distros-nl.s ed | nl
Rapport sur les distributions Linux
Nom | Regarder. | Libéré |
---- | ---- | -------- |
1 | Fedora | 5 | 2006-03-20 |
2 | Fedora | 6 | 2006-10-24 |
3 | Fedora | 7 | 2007-05-31 |
4 | Fedora | 8 | 2007-11-08 |
5 | Fedora | 9 | 2008-05-13 |
6 | Fedora | 10 | 2008-11-25 |
7 | SUSE | 10.1 | 2006-05-11 |
8 | SUSE | 10.2 | 2006-12-07 |
9 | SUSE | 10.3 | 2007-10-04 |
10 | SUSE | 11.0 | 2008-06-19 |
11 | Ubuntu | 6.06 | 2006-06-01 |
12 | Ubuntu | 6.10 | 2006-10-26 |
13 | Ubuntu | 7.04 | 2007-04-19 |
14 | Ubuntu | 7.10 | 2007-10-18 |
15 | Ubuntu | 8.04 | 2008-04-24 |
16 | Ubuntu | 8.10 | 2008-10-30 |
Fin du rapport
Notre rapport est le résultat de notre pipeline de commandes. Tout d'abord, nous trions la liste par nom de distribution et version (champs 1 et 2), puis nous traitons les résultats avec sed, en ajoutant l'en-tête du rapport (y compris le balisage de page logique pour nl) et pied de page. Enfin, nous traitons le résultat avec nl, qui, par défaut, ne numérote que les lignes du flux de texte qui appartiennent à la section corps de la page logique.
Nous pouvons répéter la commande et expérimenter différentes options pour nl. Certains sont intéressants :
nl -n rz
nl -n rz
et les
nl -w 3 -s ' '
nl -w 3 -s ' '