Como já comentei em alguns posts atrás, o | (pipe) é um redirecionador de comandos muito útil. Ele funciona como se fosse um tubo… pegando a saída de um comando e passando para outro!
Vejamos a utilização do pipe com os comandos head e tail. Vamos usar o tão-usado /etc/passwd para exemplo. Com os comandos head e o tail, consigo ver o início e o fim do arquivo.
Agora, imaginando que eu por algum motivo queira ver o que tem no meio de /etc/passwd!
Infelizmente, eu teclei “m<tab><tab>” e não apareceu nenhum comando chamado meiol =/
Então, lancei mão do pipe, e olha abaixo o que resultou essa experiência…
Problema:
Meu arquivo /etc/passwd possui 30 linhas! Como descobri isso?
Utilizei o comando:
# wc -l /etc/passwd
30 /etc/passwd
Esse wc vem de “word count” e o parâmetro -l serve para contagem de linhas 🙂 .
Continuando com o problema, sei que meu arquivo tem 30 linhas, e eu desejo ver da linha 15 até a linha 25. Como resolver isso, utilizando os comandos head e tail?
Solução
1º) Verificar onde está a linha 15 do arquivo… para isso, usamos o comando cat (que é um visualizador de arquivos em modo texto) com a opção -n, que serve para numerar as linhas:
# cat -n /etc/passwd
2º) Agora, vamos fazer uma “continha de padeiro”:
25 (a linha final que desejo ver) – 15 (a linha inicial) = 10
Tenho agora em mãos, a quantidade de linhas que desejo visualizar 😉 .
3º) Resolvendo o problema com o head, pipe e o tail:
# cat -n /etc/passwd | head -25 | tail -11
15 list:x:38:38:Mailing List Manager:/var/list:/bin/sh
16 irc:x:39:39:ircd:/var/run/ircd:/bin/sh
17 gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
18 nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
19 Debian-exim:x:100:102::/var/spool/exim4:/bin/false
20 statd:x:101:65534::/var/lib/nfs:/bin/false
21 identd:x:102:65534::/var/run/identd:/bin/false
22 ivani:x:1000:1000:,,,:/home/ivani:/bin/bash
23 sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin
24 vana:x:1001:1001:,,,:/home/vana:/bin/bash
25 josue:x:1002:1002:,,,:/home/josue:/bin/bash
E colocamos para o tail mostrar 11 linhas ao invés de 10 pois o tail mostra exatamente as 10 últimas linhas… e queremos ver a linha anterior também que é exatamente a linha 15.
Vimos nesse exemplo, que o pipe trabalhou bastante! Pegou a saída do comando cat -n /etc/passwd e passou para o head mostrar as 25 primeiras linhas do arquivo, e depois, ainda entrou em ação, pegando a saída do comando head e passou para o tail finalizar, mostrando as últimas 11 linhas, que é o nosso resultado final!