Bash One Liners #5

Em: 01/08/2008 Tags: , , , Referencie do seu blog (Trackback)

Para listar quais arquivos possuem ocorrência de uma determinada expressão (ideal para procurar por utilização de nomes de variáveis, procedimentos, tabelas de banco de dados etc.), podemos utilizar o seguinte one liner:

grep 'expressão' * -R | cut -d: -f1 | uniq

Passo a passo:

  1. O comando grep com as opções * -R irá vascular recursivamente o diretório atual em busca de expressão, e para cada ocorrência que encontrar irá imprimir na saída padrão o nome do arquivo onde expressão foi encontrada (e se expressão aparece mais de 1 vez no mesmo arquivo, o nome desse arquivo aparecerá mais de uma vez na saída padrão).

  2. A saída do comando grep é estrutura na forma caminho-do-arquivo:conteúdo-da-linha, e como queremos apenas o nome do arquivo, utilizamos o comando cut para dividir a entrada em 2 colunas (usando como delimitador o caracter dois-pontos), e dessas colunas utilizar somente a primeira.

  3. A saída do comando cut será um fluxo com um nome de arquivo por linha, mas podendo conter nomes de arquivos que aparecem em mais de 1 linha. O comando uniq elimina as ocorrências duplicadas de uma linha.

Destaco aqui a utilização do comando cut, utilizado pela primeira vez nesta série de one liners. Seu objetivo é fatiar o conteúdo de um arquivo ou da entrada padrão, de acordo com um delimitador de dados (especificado com a opção -d). Para indicar qual(is) fatia(s) queremos utilizamos a opção -f. O uso de um delimitador de dados, na verdade, é opcional, para que possamos capturar, por exemplo, as N colunas mais à esquerda de um arquivo.

Para quem gostou do cut fica uma dica: ele possui um irmão, o comando paste.

Artigos relacionados:

Escreva um comentário (utilize o formato Markdown)