Exemplo de utilização do | (pipe)

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!

Anúncios

Comando wc

O comando wc (word count) é utilizado para contar caracteres, palavras e/ou linhas. Imaginem a seguinte situação: o chefe do departamento surtou e quer saber quantas linhas existem dentro do /etc/passwd.

Exemplo:

# wc -l /etc/passwd
20 /etc/passwd

Podemos informar ao chefe que o nosso /etc/passwd tem 20 linhas!

Sem parâmetro, o wc conta linhas, palavras e caracteres e mostra todas as informações na tela! Exemplo:

# wc /etc/passwd
20  25 807 /etc/passwd

Onde:

20 representa a quantidade de linhas
25 representa quantidade de palavras
807 representa a quantidade de caracteres

Separados, os resultados acima são obtidos com as opções:

✔ Linhas
# wc -l /etc/passwd
20 /etc/passwd

✔ Palavras
# wc -w /etc/passwd
25 /etc/passwd

✔ Caracteres
# wc -c /etc/passwd
807 /etc/passwd

O comando cat, que comentei em um post, também possui a opção de contar… é a opção -n… lembrando que a numeração é visual… não altera nada no arquivo!

Exemplo:

# cat -n /etc/passwd
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  sync:x:4:65534:sync:/bin:/bin/sync
6  games:x:5:60:games:/usr/games:/bin/sh

E por ai vai… mas fica aqui a dica… se quiser apenas contar linhas, o wc já dá conta do recado… mas se quiser saber por exemplo, qual o número de uma linha específico, pode usar o cat com a opção -n.

Por exemplo, quero ver em qual o número da linha do usuário nix:

# cat -n /etc/passwd | grep nix
20  nix:x:1000:1000:,,,:/home/nix:/bin/bash

Para saber mais…

# man cat

# man wc

Até o próximo post! 😉