Introducción
En este tutorial exploraremos el comando nl de Linux, que permite numerar las líneas de los archivos de texto. Aprenderemos a utilizarlo en distintas situaciones para facilitar la referencia a líneas concretas de un documento. Esta habilidad resulta especialmente útil para programadores, administradores de sistemas y cualquier persona que trabaje habitualmente con archivos de texto.
Imagina que eres un desarrollador de software junior y estás trabajando en tu primer proyecto importante. El responsable de tu equipo te ha pedido revisar un archivo de configuración y comentar algunas secciones concretas. El comando nl te permitirá localizar y mencionar fácilmente líneas específicas del archivo, haciendo que la colaboración sea más eficaz.
Comprender el comando nl básico
En este paso examinarás un archivo de configuración de ejemplo mediante el comando nl.
Primero, accede al directorio del proyecto. Escribe el siguiente comando y pulsa Intro:
cd /home/labex/project
Este comando cambia el directorio actual a /home/labex/project, donde se encuentran nuestros archivos de ejemplo.
Ahora utiliza el comando nl para mostrar el contenido de config.txt con los números de línea. Escribe:
nl config.txt | tee nl-basic.txt
Deberías ver una salida similar a esta:
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
...
Veamos qué sucede:
- El comando
nlha añadido los números de línea a la izquierda de cada línea del archivo. - Observa que los números están alineados a la derecha en una columna de 6 caracteres de ancho.
- La línea en blanco (la línea 4 del archivo original) no se numera de forma predeterminada.
- El comando
teemuestra la salida y también la guarda ennl-basic.txt.
Esta numeración facilita la referencia a líneas concretas al comentar el archivo con tus compañeros. Por ejemplo, podrías decir: «Veamos la línea 2 para comprobar el número de puerto».
Si no aparece esta salida o se produce un error, asegúrate de encontrarte en el directorio correcto (/home/labex/project) y de que exista el archivo config.txt. Puedes comprobarlo utilizando el comando ls para listar los archivos del directorio actual.
Numerar todas las líneas, incluidas las líneas en blanco
En este paso numerarás todas las líneas, incluidas las líneas en blanco. Esto resulta útil cuando necesitas hacer referencia a líneas vacías o cuando trabajas con archivos en los que las líneas en blanco tienen importancia. Para ello utilizaremos la opción -b a.
Ejecuta el siguiente comando:
nl -b a config.txt | tee nl-all-lines.txt
Ahora deberías ver una salida similar a esta:
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
...
Esto es lo que ocurre:
- La opción
-bcontrola la numeración de las líneas del cuerpo del archivo. - El argumento
asignifica «todas» e indica anlque numere todas las líneas, incluidas las vacías. - Observa que la línea 4, que antes estaba vacía y no tenía número, ahora sí está numerada.
teemuestra la salida y la guarda ennl-all-lines.txt.
Esta función es especialmente útil cuando necesitas mencionar líneas vacías en una explicación o cuando trabajas con archivos en los que las líneas en blanco tienen un significado concreto, como ocurre en algunos lenguajes de programación o archivos de configuración.
Si la línea en blanco no aparece numerada, comprueba que hayas incluido la opción -b a en el comando.
Personalizar el formato de los números
En este paso personalizarás la forma en que se muestran los números de línea. Esto puede mejorar la legibilidad o preparar la salida para procesarla posteriormente. Vamos a alinear los números a la derecha y añadir ceros iniciales.
Utiliza la opción -n rz:
nl -n rz config.txt | tee nl-zero-padded.txt
La salida debería tener este aspecto:
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
Desglosemos la opción -n rz:
-npermite especificar el formato de numeración.rsignifica alineación a la derecha, que de hecho es el comportamiento predeterminado.zindica que se deben añadir ceros iniciales.teemuestra la salida y la guarda ennl-zero-padded.txt.
Este formato resulta especialmente útil cuando necesitas ordenar o procesar la salida con otros comandos, ya que el ancho fijo garantiza una alineación uniforme.
Si la salida no coincide con la mostrada, asegúrate de haber escrito correctamente el comando, incluida la opción -n rz.
Numerar tipos de líneas específicos
En este paso utilizarás nl para numerar únicamente determinados tipos de líneas. Esto resulta muy práctico al trabajar con archivos complejos en los que quieres centrarte en líneas concretas. Numeraremos solo las líneas no vacías que no comiencen por el carácter #, utilizado habitualmente para los comentarios en los archivos de configuración.
Utiliza el siguiente comando:
nl -b p'^[^#]' config.txt | tee nl-settings-only.txt
Deberías ver una salida similar a esta:
## 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
Analicemos este comando más complejo:
-b pindica anlque numere únicamente las líneas que coincidan con un patrón específico.'^[^#]'es un patrón de expresión regular:^significa «inicio de la línea».[^#]significa «cualquier carácter que no sea#».- Por tanto, el patrón completo coincide con cualquier línea que no comience por
#.
teemuestra la salida y la guarda ennl-settings-only.txt.
Este comando resulta útil cuando quieres centrarte en las líneas activas de configuración e ignorar los comentarios. Es especialmente práctico en archivos de configuración grandes, ya que permite identificar y referenciar rápidamente los ajustes efectivos.
Si la salida no es la esperada, comprueba que hayas escrito el comando exactamente como se muestra, incluidas las comillas simples que rodean el patrón.
Combinar opciones para crear una numeración compleja
En este paso combinarás varias opciones de nl para crear un esquema de numeración más elaborado. Numerarás todas las líneas, utilizarás un formato personalizado y establecerás el ancho del campo numérico.
Ejecuta el siguiente comando:
nl -b a -n rz -s ': ' -w 3 config.txt | tee nl-combined.txt
Este comando realiza las siguientes acciones:
-b a: numera todas las líneas, incluidas las líneas en blanco.-n rz: alinea los números a la derecha y añade ceros iniciales.-s ': ': utiliza:como separador entre el número y el contenido de la línea.-w 3: establece en 3 caracteres el ancho del campo numérico.
Deberías ver una salida similar a esta:
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
Veamos qué sucede:
- Se numeran todas las líneas, incluidas las vacías.
- Los números se alinean a la derecha y llevan ceros iniciales.
- El separador entre el número y el contenido de la línea es
:. - El ancho del campo numérico se establece en 3 caracteres.
- La salida mostrada se guarda en
nl-combined.txt.
Este esquema de numeración puede ser muy útil al trabajar con archivos de configuración estructurados o documentos divididos en secciones. Permite hacer referencia fácilmente a las líneas de cada sección.
Si la salida no coincide exactamente, revisa con atención el comando introducido, prestando especial atención a los espacios y los caracteres especiales.
Resumen
En este tutorial hemos explorado el comando nl y sus distintas opciones para numerar las líneas de archivos de texto. Hemos aprendido a:
- Utilizar el comando
nlbásico para añadir números de línea a un archivo. - Numerar todas las líneas, incluidas las vacías, mediante la opción
-b a. - Personalizar el formato de los números con la opción
-n rz. - Numerar tipos de líneas específicos mediante patrones de coincidencia.
- Combinar varias opciones para crear esquemas de numeración complejos.
Estas habilidades te ayudarán a desplazarte por archivos de configuración, código fuente y otros archivos de texto, así como a hacer referencia a sus líneas durante tus proyectos de desarrollo.
Entre las opciones adicionales del comando nl que no se han tratado en este tutorial se incluyen:
-v NUM: comienza la numeración en NUM en lugar de 1.-i NUM: incrementa los números en NUM en lugar de 1.-l NUM: agrupa NUM líneas y numera únicamente la primera línea de cada grupo.-f a: numera todas las líneas de encabezado, es decir, las líneas anteriores a la primera línea del cuerpo.
Estas opciones ofrecen aún más flexibilidad al trabajar con el comando nl.



