Páginas

Showing posts with label trick. Show all posts
Showing posts with label trick. Show all posts

Wednesday, September 14, 2011

Grep e Less com cores!

Esta é uma nota mental.

egrep -r --include="*.rkt" "[a-z-]+#" . --color=always | less -R

Para usar o Grep com cores, geralmente temos um alias grep='grep --color=auto' no nosso ~/.bashrc.

Mas acontece que muitas das vezes o resultado é grande é fazemos um pipe pro less. Como triste consequência perdemos as cores...
Para forçar o grep (egrep, fgrep, ...) a exibir cores use o --color=always, assim ele manda o output pro less com cores.
A opção -R do less faz com que ele interprete os caracteres de escape de cores do terminal.

grep "alguma coisa" /caminho/da/busca --color=always | less -R

Nota: pode ser usado também com o more:

grep "alguma coisa" /caminho/da/busca --color=always | more

[Update]
Como meu amigo Breno Oliveira sugeriu, uma alternativa interessante ao grep é o ack.
http://betterthangrep.com/

Usando o ack o comando fica:

ack "regexp perl" [caminho] --color | less -R

Monday, September 5, 2011

Lista de números com o Bash

Quer executar um comando várias vezes no Bash?

Use o for! E como gerar números sequenciais?

Voltamos ao brace expansion que citei noutro post. Você pode usar chaves para gerar strings arbitrárias, e também sequência de números.

Veja:
rodolfo@lisa:/tmp/bash-tricks$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
rodolfo@lisa:/tmp/bash-tricks$ echo {5..0}
5 4 3 2 1 0
rodolfo@lisa:/tmp/bash-tricks$ echo {7..21..2}
7 9 11 13 15 17 19 21
rodolfo@lisa:/tmp/bash-tricks$ echo {30..-40..-5}
30 25 20 15 10 5 0 -5 -10 -15 -20 -25 -30 -35 -40

A sintaxe é {inicial..final..incremento}, e o incremento é opcional. Se inicial < final, o incremento é 1 por padrão, caso contrário é -1.

Com o for:

rodolfo@lisa:/tmp/bash-tricks$ for x in {1..3}; do echo "Hello $x"; done
Hello 1
Hello 2
Hello 3

Tuesday, August 30, 2011

Auto-completar Bash usando chaves { }

Bem, se você usa o terminal mesmo que pouco deve saber que a tecla TAB é usada para auto-completar nomes de arquivos e alguns comandos.

Mas o que você não deve saber é do uso das chaves como forma de construir strings arbitrárias. E mais, se você é como o meu amigo Flávio Amieiro e já sabia disso, aposto que você não sabia que pode usar auto-completar e as chaves {} {} {} {}!!!!

Digamos que estou num diretório assim:


rodolfo@lisa:/tmp/bash-tricks$ ls
foo_ball.egg  foobaz         foo_spam2.egg  foo_spam.egg  hello.c
foo-bar       foo_spam1.egg  foo_spam3.egg  foo.txt

Podemos auto-completar nomes com TAB. Por exemplo, digitar "h" seguido de TAB vai resultar em "hello.c".

Digamos que quero fazer um diff entre foo_spam2.egg e foo_spam3.egg. Uma forma de fazer isso seria digitar o comando completo:

diff foo_spam2.egg foo_spam3.egg


Depois de ler isto aqui, espero que sua forma de fazer seja assim:

diff foo_spam{2,3}.egg

O Bash expande automaticamente tudo que estiver dentro das chaves. Itens são separados por vírgula, sem espaços. Se quiser colocar um espaço ou vírgula na string gerada, escape com uma contra-barra \.

Exemplo:

rodolfo@lisa:/tmp/bash-tricks$ echo O Bash é {legal\,,muito\ poderoso,e\ divertido.}
O Bash é legal, muito poderoso e divertido.

Agora a cereja no topo do bolo! Como gerar uma string como a do exemplo acima a partir dos arquivos num diretório?

Digamos que queremos remover todos os arquivos que começam com "foo".
Começamos digitando:

rodolfo@lisa:/tmp/bash-tricks$ rm f

Agora tecle alt + { e você verá o Bash auto-completar usando a notação de {}:

rodolfo@lisa:/tmp/bash-tricks$ rm foo{-bar,.txt,_{ball.egg,spam{.egg,1.egg,2.egg,3.egg}},baz} 

Fantástico não? Note que você pode apontar para outros diretórios, e fazer combinações arbitrariamente complexas.
Não sei em que parte da documentação isto está, descobri por acaso!

Quer aprender mais? man bash

Monday, June 28, 2010

Utilização do disco usando du e awk

Hoje escrevi algumas linhas no shell para me ajudar a identificar onde estavam as coisas mais pesadas na hierarquia...

Fica aqui como possível referência futura:

  • Listar/calcular tamanho para 2 níveis de diretórios 
du -k -d2 . | awk '{printf "%-40s %4.1f MB\n", $2, $1/1024}' | sort

  • Ver os 15 maiores diretórios
du -k * | sort -nr | head -n 15

  • Ver apenas diretórios com mais de 1 MB
du -k -d3 main | awk '{ if ($1 >= 1024) printf "%-40s %4.1f MB\n", $2, $1/1024}' | sort