Comando nl do Linux: numeração de linhas

LinuxBeginner
Pratique Agora

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 nl adicionou 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 tee exibe a saída e a salva em nl-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 -b controla a numeração das linhas do corpo do arquivo.
  • O argumento a significa “todas” e instrui o nl a 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 tee exibe a saída e a salva em nl-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:

  • -n especifica o formato da numeração.
  • r significa alinhamento à direita, que já é o comportamento padrão.
  • z adiciona zeros à esquerda.
  • O comando tee exibe a saída e a salva em nl-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 p instrui o nl a 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 tee exibe a saída e a salva em nl-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:

  1. Usar o comando nl básico para adicionar números de linha a um arquivo.
  2. Numerar todas as linhas, inclusive as linhas em branco, usando a opção -b a.
  3. Personalizar o formato dos números com a opção -n rz.
  4. Numerar tipos específicos de linhas usando correspondência de padrões.
  5. 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.