<Anterior | Contenido | Siguiente>
nl - Líneas numéricas
La nl El programa es una herramienta bastante arcana que se utiliza para realizar una tarea sencilla. Numera líneas. En su uso más simple, se parece gato -n:
[yo @ linuxbox ~] $ nl distros.txt | cabeza
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 |
Como gato, nl puede aceptar varios archivos como argumentos de línea de comando o como entrada estándar. Sin embargo, nl tiene varias opciones y admite una forma primitiva de marcado para permitir tipos de numeración más complejos.
nl admite un concepto llamado "páginas lógicas" al numerar. Esto permite a nl restablecer (comenzar de nuevo) la secuencia numérica al realizar la numeración. Usando opciones, es posible establecer el número inicial en un valor específico y, hasta cierto punto, su formato. Una página lógica se divide en encabezado, cuerpo y pie de página. Dentro de cada una de estas secciones, la numeración de líneas puede reiniciarse y / o asignarse un estilo diferente. Si nl recibe varios archivos, los trata como un solo flujo de texto. Las secciones en el flujo de texto se indican mediante la presencia de un marcado de aspecto bastante extraño agregado al texto:
Tabla 21-1: Marcado nl
Significado del marcado
Significado del marcado
\: \: \: Inicio del encabezado de página lógica
\: \: Inicio del cuerpo de la página lógica
\: Inicio del pie de página lógico
Cada uno de los elementos de marcado anteriores debe aparecer solo en su propia línea. Después de procesar un elemento de marcado, nl lo elimina del flujo de texto.
Aquí están las opciones comunes para nl:
Tabla 21-2: Opciones comunes de nl
Opción Significado
Opción Significado
-b style Establecer la numeración del cuerpo en style, donde el style es uno de los siguientes:
a = numerar todas las líneas
t = numerar solo las líneas que no están en blanco. Este es el predeterminado.
n = ninguno
pregexp = solo números de líneas que coinciden con la expresión regular básica
expresión regular
-f style Establecer la numeración de pie de página en style. El valor predeterminado es n (ninguno).
-h style Establecer la numeración del encabezado en style. El valor predeterminado es n (ninguno).
-i número Establecer el incremento de numeración de páginas en número. El valor predeterminado es uno.
-n formato Establece el formato de numeración en formato, donde formato es:
ln = justificado a la izquierda, sin ceros a la izquierda.
rn = justificado a la derecha, sin ceros iniciales. Este es el predeterminado.
rz = justificado a la derecha, con ceros a la izquierda.
-p No restablece la numeración de páginas al comienzo de cada página lógica.
-s cadena Agregar cadena al final de cada número de línea para crear un separador.
El valor predeterminado es un carácter de tabulación única.
-v número Establezca el número de la primera línea de cada página lógica en número. El valor predeterminado es uno.
-w anchura Establezca el ancho del campo de número de línea en anchura. El valor predeterminado es 6.
Es cierto que probablemente no vamos a numerar líneas con tanta frecuencia, pero podemos usar nl para ver cómo podemos combinar múltiples herramientas para realizar tareas más complejas. Nos basaremos en nuestro trabajo en el capítulo anterior para producir un informe de distribuciones de Linux. Ya que estaremos usando nl, será útil incluir su marcado de encabezado / cuerpo / pie de página. Para hacer esto, lo agregaremos al SED guión del último capítulo. Usando nuestro editor de texto, cambiaremos el script de la siguiente manera y lo guardaremos como distribuciones-nl.sed:
# secuencia de comandos sed para producir un informe de distribuciones de Linux
Yo 1
\\:\\:\\:
Informe de distribuciones de Linux
Versión de nombre Liberado
---- ---- --------
\\: \\:
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ un
\\:
Fin del informe
# secuencia de comandos sed para producir un informe de distribuciones de Linux
Yo 1
\\:\\:\\:
Informe de distribuciones de Linux
Versión de nombre Liberado
---- ---- --------
\\: \\:
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ un
\\:
Fin del informe
El script ahora inserta el nl marcado de página lógica y agrega un pie de página al final del informe. Tenga en cuenta que tuvimos que duplicar las barras invertidas en nuestro marcado, porque normalmente se interpretan como un carácter de escape por SED.
A continuación, produciremos nuestro informe mejorado combinando sort, SED y nl:
[yo @ linuxbox ~] $ ordenar -k 1,1 -k 2n distros.txt | sed -f distribuciones-nl.s ed | nl
Informe de distribuciones de Linux
Nombre | versión | Publicado |
---- | ---- | -------- |
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 del informe
Nuestro informe es el resultado de nuestra línea de comandos. Primero, ordenamos la lista por nombre de distribución y versión (campos 1 y 2), luego procesamos los resultados con SED, agregando el encabezado del informe (incluido el marcado de página lógica para nl) y pie de página. Finalmente, procesamos el resultado con nl, que, de forma predeterminada, solo numera las líneas del flujo de texto que pertenecen a la sección del cuerpo de la página lógica.
Podemos repetir el comando y experimentar con diferentes opciones para nl. Algunos interesantes son:
nl-n rz
nl-n rz
y
nl -w 3 -s ''
nl -w 3 -s ''