<Anterior | Conteúdo | Próxima>
nl - Número de linhas
O nl programa é uma ferramenta bastante misteriosa usada para realizar uma tarefa simples. Numera as linhas. Em seu uso mais simples, ele se assemelha cat-n:
[me @ linuxbox ~] $ nl distros.txt | cabeça
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 pode aceitar vários arquivos como argumentos de linha de comando ou entrada padrão. Contudo, nl tem uma série de opções e suporta uma forma primitiva de marcação para permitir tipos mais complexos de numeração.
nl suporta um conceito chamado “páginas lógicas” ao numerar. Isso permite que nl reinicie (reinicie) a seqüência numérica durante a numeração. Usando opções, é possível definir o número inicial com um valor específico e, até certo ponto, seu formato. Uma página lógica é subdividida em cabeçalho, corpo e rodapé. Dentro de cada uma dessas seções, a numeração da linha pode ser redefinida e / ou atribuída a um estilo diferente. Se nl receber vários arquivos, ele os tratará como um único fluxo de texto. As seções no fluxo de texto são indicadas pela presença de alguma marcação de aparência bastante estranha adicionada ao texto:
Tabela 21-1: Marcação nl
Significado da marcação
Significado da marcação
\: \: \: Início do cabeçalho lógico da página
\: \: Início do corpo lógico da página
\: Início do rodapé lógico da página
Cada um dos elementos de marcação acima deve aparecer sozinho em sua própria linha. Depois de processar um elemento de marcação, nl exclui-o do fluxo de texto.
Aqui estão as opções comuns para nl:
Tabela 21-2: Opções nl comuns
Significado da opção
Significado da opção
-b estilo Definir numeração do corpo para estilo, Onde estilo é um dos seguintes:
a = numera todas as linhas
t = número apenas de linhas não em branco. Este é o padrão.
n = nenhum
pregexp = número apenas de linhas correspondendo à expressão regular básica
expressão regular.
-f estilo Definir numeração de rodapé para estilo. O padrão é n (nenhum).
-h estilo Definir numeração de cabeçalho para estilo. O padrão é n (nenhum).
-i número Definir incremento de numeração de página para número. O padrão é um.
-n formato Define o formato de numeração para formato, onde o formato é:
ln = justificado à esquerda, sem zeros à esquerda.
rn = justificado à direita, sem zeros à esquerda. Este é o padrão.
rz = justificado à direita, com zeros à esquerda.
-p Não redefine a numeração de página no início de cada página lógica.
-s corda Adicione corda ao final de cada número de linha para criar um separador.
O padrão é um único caractere de tabulação.
-v número Defina o número da primeira linha de cada página lógica para número. O padrão é um.
-w largura Defina a largura do campo do número da linha para largura. O padrão é 6.
É certo que provavelmente não numeraremos as linhas com frequência, mas podemos usar nl para ver como podemos combinar várias ferramentas para realizar tarefas mais complexas. Vamos continuar nosso trabalho no capítulo anterior para produzir um relatório de distribuições Linux. Uma vez que estaremos usando nl, será útil incluir sua marcação de cabeçalho / corpo / rodapé. Para fazer isso, vamos adicioná-lo ao sede script do último capítulo. Usando nosso editor de texto, vamos alterar o script da seguinte maneira e salvá-lo como distros-nl.sed:
#sed script para produzir relatório de distribuições Linux
1 i \
\\: \\: \\: \
\
Relatório de Distribuições Linux \
\
Ver nome Liberado\
---- ---- -------- \
\\: \\:
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ a \
\\: \
\
Fim do relatório
#sed script para produzir relatório de distribuições Linux
1 i \
\\: \\: \\: \
\
Relatório de Distribuições Linux \
\
Ver nome Liberado\
---- ---- -------- \
\\: \\:
s/\([0-9]\{2\}\)\/\([0-9]\{2\}\)\/\([0-9]\{4\}\)$/\3-\1-\2/
$ a \
\\: \
\
Fim do relatório
O script agora insere o nl marcação de página lógica e adiciona um rodapé no final do relatório. Observe que tivemos que dobrar as barras invertidas em nossa marcação, porque elas são normalmente interpretadas como um caractere de escape por sede.
A seguir, produziremos nosso relatório aprimorado combinando tipo, sede e nl:
[me @ linuxbox ~] $ classificar -k 1,1 -k 2n distros.txt | sed -f distros-nl.s ed | nl
Relatório de Distribuições Linux
Nome | Veja | Lançado |
---- | ---- | -------- |
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 |
Fim do relatório
Nosso relatório é o resultado de nosso pipeline de comandos. Primeiro, classificamos a lista por nome de distribuição e versão (campos 1 e 2) e, em seguida, processamos os resultados com sede, adicionando o cabeçalho do relatório (incluindo a marcação de página lógica para nl) e rodapé. Finalmente, processamos o resultado com nl, que, por padrão, numera apenas as linhas do fluxo de texto que pertencem à seção do corpo da página lógica.
Podemos repetir o comando e experimentar diferentes opções para nl. Alguns interessantes são:
nl -n rz
nl -n rz
e
nl -w 3 -s ''
nl -w 3 -s ''