Introdução
Neste tutorial, você conhecerá o comando nl do Linux, usado para numerar linhas em arquivos de texto. Aprenderemos a utilizá-lo em diferentes situações, facilitando a referência a linhas específicas de um documento. Esse conhecimento é especialmente útil para programadores, administradores de sistemas e qualquer pessoa que trabalhe regularmente com arquivos de texto.
Imagine que você seja um desenvolvedor de software júnior trabalhando em seu primeiro grande projeto. O líder da equipe pediu que você revisasse um arquivo de configuração e discutisse algumas seções específicas. Com o comando nl, você poderá referenciar e discutir determinadas linhas do arquivo com facilidade, tornando a colaboração mais eficiente.
Entendendo o comando nl básico
Nesta etapa, você examinará um arquivo de configuração de exemplo usando o comando nl.
Primeiro, acesse o diretório do projeto. Digite o comando a seguir e pressione Enter:
cd /home/labex/project
Esse comando altera o diretório atual para /home/labex/project, onde estão localizados nossos arquivos de exemplo.
Agora, use o comando nl para visualizar o conteúdo de config.txt com os números das linhas. Digite:
nl config.txt | tee nl-basic.txt
Você deverá ver uma saída semelhante 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
...
Veja o que está acontecendo:
- O comando
nladicionou os números das linhas à esquerda de cada linha do arquivo. - Observe que os números estão alinhados à direita em uma coluna com 6 caracteres de largura.
- A linha em branco (linha 4 do arquivo original) não é numerada por padrão.
- O comando
teeexibe a saída e a salva emnl-basic.txt.
Essa numeração facilita a referência a linhas específicas ao discutir o arquivo com seus colegas. Por exemplo, você poderia dizer: “Vamos verificar a linha 2 para conferir o número da porta.”
Se essa saída não aparecer ou ocorrer um erro, verifique se você está no diretório correto (/home/labex/project) e se o arquivo config.txt existe. Para confirmar, use o comando ls e liste os arquivos do diretório atual.
Numerando todas as linhas, incluindo as linhas em branco
Nesta etapa, você numerará todas as linhas, inclusive as linhas em branco. Isso pode ser útil quando for necessário referenciar linhas vazias ou trabalhar com arquivos nos quais os espaços em branco são relevantes. Para isso, usaremos a opção -b a.
Execute o comando a seguir:
nl -b a config.txt | tee nl-all-lines.txt
Agora, você deverá ver uma saída semelhante 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
...
Entenda o que está acontecendo:
- A opção
-bcontrola a numeração das linhas do corpo do arquivo. - O argumento
asignifica “todas” e instrui onla numerar todas as linhas, inclusive as linhas em branco. - Observe que a linha 4, que antes estava vazia e sem numeração, agora recebeu um número.
- O comando
teeexibe a saída e a salva emnl-all-lines.txt.
Isso é particularmente útil quando você precisa fazer referência a linhas vazias em discussões ou trabalhar com arquivos nos quais as linhas em branco têm significado, como ocorre em algumas linguagens de programação e arquivos de configuração.
Se a linha em branco não estiver sendo numerada, confirme se você incluiu a opção -b a no comando.
Personalizando o formato dos números
Nesta etapa, você personalizará a forma como os números das linhas são exibidos. Isso pode melhorar a legibilidade ou preparar a saída para um processamento posterior. Vamos alinhar os números à direita e adicionar zeros à esquerda.
Use a opção -n rz:
nl -n rz config.txt | tee nl-zero-padded.txt
A saída deverá ser semelhante a esta:
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
Veja o que a opção -n rz faz:
-nespecifica o formato da numeração.rsignifica alinhamento à direita, que já é o comportamento padrão.zadiciona zeros à esquerda.- O comando
teeexibe a saída e a salva emnl-zero-padded.txt.
Esse formato é especialmente útil quando você precisa ordenar ou processar a saída posteriormente com outros comandos, pois a largura fixa garante um alinhamento consistente.
Se a sua saída for diferente, verifique se o comando foi digitado corretamente, incluindo a opção -n rz.
Numerando tipos específicos de linhas
Nesta etapa, você usará o nl para numerar apenas determinados tipos de linhas. Isso pode ser muito útil ao trabalhar com arquivos complexos nos quais você deseja se concentrar em linhas específicas. Vamos numerar apenas as linhas não vazias que não começam com o caractere #, geralmente usado para comentários em arquivos de configuração.
Use o comando a seguir:
nl -b p'^[^#]' config.txt | tee nl-settings-only.txt
Você deverá ver uma saída semelhante 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
Vamos analisar esse comando mais complexo:
-b pinstrui onla numerar apenas as linhas que correspondem a um determinado padrão.'^[^#]'é um padrão de expressão regular:^significa “início da linha”.[^#]significa “qualquer caractere que não seja#”.- Juntos, eles correspondem a qualquer linha que não comece com
#.
- O comando
teeexibe a saída e a salva emnl-settings-only.txt.
Esse comando é útil quando você quer se concentrar nas linhas ativas da configuração e ignorar os comentários. Ele é especialmente prático em arquivos de configuração grandes, nos quais é necessário identificar e referenciar rapidamente as configurações efetivas.
Se a saída não for a esperada, confirme se o comando foi digitado exatamente como mostrado, incluindo as aspas simples ao redor do padrão.
Combinando opções para uma numeração complexa
Nesta etapa, você combinará várias opções do nl para criar um esquema de numeração mais elaborado. Você numerará todas as linhas, usará um formato personalizado e definirá a largura do campo numérico.
Execute o comando a seguir:
nl -b a -n rz -s ': ' -w 3 config.txt | tee nl-combined.txt
Esse comando faz o seguinte:
-b a: numera todas as linhas, inclusive as linhas em branco.-n rz: alinha os números à direita e adiciona zeros à esquerda.-s ': ': usa:como separador entre o número e o conteúdo da linha.-w 3: define a largura do campo numérico como 3 caracteres.
Você deverá ver uma saída semelhante 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
Veja o que está acontecendo:
- Todas as linhas são numeradas, inclusive as linhas em branco.
- Os números são alinhados à direita e preenchidos com zeros à esquerda.
- O separador entre o número e o conteúdo da linha é
:. - A largura do campo numérico é definida como 3 caracteres.
- A saída exibida é salva em
nl-combined.txt.
Esse esquema de numeração pode ser muito útil ao trabalhar com arquivos de configuração estruturados ou documentos divididos em seções distintas. Ele facilita a referência às linhas dentro de cada seção.
Se a saída não corresponder exatamente ao exemplo, revise cuidadosamente o comando digitado, prestando atenção especial aos espaços e aos caracteres especiais.
Resumo
Neste tutorial, exploramos o comando nl e suas diversas opções para numerar linhas em arquivos de texto. Aprendemos a:
- Usar o comando
nlbásico para adicionar números de linha a um arquivo. - Numerar todas as linhas, inclusive as linhas em branco, usando a opção
-b a. - Personalizar o formato dos números com a opção
-n rz. - Numerar tipos específicos de linhas usando correspondência de padrões.
- Combinar várias opções para criar esquemas de numeração mais complexos.
Esses conhecimentos ajudarão você a navegar por arquivos de configuração, código-fonte e outros arquivos de texto usados em seus projetos de desenvolvimento, além de facilitar a referência a linhas específicas.
Outras opções do comando nl que não foram abordadas neste tutorial incluem:
-v NUM: inicia a numeração em NUM em vez de 1.-i NUM: incrementa os números em NUM em vez de 1.-l NUM: agrupa NUM linhas e numera apenas a primeira linha de cada grupo.-f a: numera todas as linhas do cabeçalho, ou seja, as linhas anteriores à primeira linha do corpo.
Essas opções oferecem ainda mais flexibilidade ao trabalhar com o comando nl.



