Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for [pt-BR] Usando o shell além do básico
Plínio Balduino
Plínio Balduino

Posted on

     

[pt-BR] Usando o shell além do básico

Imagem:Hackerman, de shiiftyshift.

Tudo bem, talvez não sejam realmente indispensáveis, mas aprendê-las vai fazer com que você se sinta a própria Hackerperson.

Quando você lida com um sistema operacional compatível com POSIX (alguma variação de UNIX, BSD, Linux, MacOS X, etc), internamente existem dois canais principais para entrada e saída de dados: ostdin e ostdout. Existem mais, mas vamos focar nesses dois.

Um executável pode ler dados destdin e gravar dados emstdout. Um exemplo disso acontecendo é quando o programa lê dados do teclado e grava, ou exibe, na tela.

O pulo do gato acontece quando você conecta ostdout de um programa com ostdin de outro usando um recurso chamado pipe (cano ou encanamento). O que um programa exibiria na tela passa a ser enviado para ostdin do programa seguinte, que processa aquelas entradas e devolve para ostdout. Você pode conectar inúmeros programas uns nos outros através dopipe, fazendo com que cada pecinha resolva uma parte do problema, transformado o dado e passando para o próximo.

O fundamento mais básico da computação

Para nosso exemplo, vamos baixar um arquivo com praticamente todas as palavras da Língua Portuguesaaqui.

Executandocat palavras.txt serão exibidas na tela as mais de trezentas e vinte mil palavras do arquivo.cat lê o arquivo e joga seu conteúdo parastdout, que neste caso é a própria tela.

Vamos usar o pipe para exibir o arquivo em ordem alfabética invertida usandosort:

$catpalavras.txt |sort-r
Enter fullscreen modeExit fullscreen mode

Agora, com o caracter depipe, o|, direcionamos o conteúdo da saída padrão decat para a entrada padrão desort, exibindo assim o arquivo em ordem alfabética invertida.

Pode pode paginar a visualização do arquivo usandoless e outro pipe:

$catpalavras.txt |sort-r | less
Enter fullscreen modeExit fullscreen mode

Pressione espaço para ir para a próxima página, ou Q para sair.

Vamos exibir apenas as palavras do dicionário que contenham o textopli. Para isso usamosgrep, que retorna apenas as entradas que contenham o texto informado:

$catpalavras.txt |greppli
Enter fullscreen modeExit fullscreen mode

Sim, você pode usargrep palavras.txt pli também, mas a ideia aqui é encadear váriospipes para fins didáticos.

E vamos usarsed para deixar a primeira letra de cada palavra em maiúscula.sed aplica uma expressão regular na entrada e retorna o resultado:

$catpalavras.txt |greppli |sed's/[a-z]/\U&/'
Enter fullscreen modeExit fullscreen mode

Para sabermos quantas palavras existem em nossa seleção, usamoswc:

$catpalavras.txt |greppli |wc-l> 382
Enter fullscreen modeExit fullscreen mode

Agora, em outro exemplo, vamos listar os arquivos em um diretório qualquer:

$ls-l
Enter fullscreen modeExit fullscreen mode

ls -l
Perceba que os dados vieram exibidos em colunas. Para pegar o conteúdo de apenas uma das colunas, usamosawk, que usa uma linguagem própria com o mesmo nome. Os nomes dos arquivos estão na nona coluna. Então, para selecioná-la, passamos essa informação para oawk:

$ls-l |awk'{print $9}'
Enter fullscreen modeExit fullscreen mode

ls -l | awk '{print $9}'

Sim, você poderia ter usadofile para isso, mas estou claramente inventando situações para poder demonstrar as ferramentas.

Por fim, vamos usarxargs, que pega os valores que chegam pelostdin e passam como parâmetros para o comando seguinte. Por exemplo, vamos listar os arquivos e os conteúdos dos diretórios usandols:

ls-l |awk'{print $9}' | xargsls
Enter fullscreen modeExit fullscreen mode

ls -l | awk '{print $9}' | xargs ls

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

I'm a software developer acting as a manager.I write about OS development, Clojure, JavaScript, team leadership, cloud computing.
  • Location
    São Paulo, BR
  • Work
    Software developer / Engineering manager
  • Joined

More fromPlínio Balduino

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp