![Cover image for [pt-BR] Usando o shell além do básico](/image.pl?url=https%3a%2f%2fmedia2.dev.to%2fdynamic%2fimage%2fwidth%3d1000%2cheight%3d420%2cfit%3dcover%2cgravity%3dauto%2cformat%3dauto%2fhttps%253A%252F%252Fdev-to-uploads.s3.amazonaws.com%252Fuploads%252Farticles%252Frdff87f5nck0dico4gej.png&f=jpg&w=240)
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.
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
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
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
Sim, você pode usar
grep 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&/'
Para sabermos quantas palavras existem em nossa seleção, usamoswc
:
$catpalavras.txt |greppli |wc-l> 382
Agora, em outro exemplo, vamos listar os arquivos em um diretório qualquer:
$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}'
Sim, você poderia ter usado
file
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
Top comments(0)
For further actions, you may consider blocking this person and/orreporting abuse