Bash One Liners #5
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:
O comando
grepcom as opções* -Rirá vascular recursivamente o diretório atual em busca deexpressão, e para cada ocorrência que encontrar irá imprimir na saída padrão o nome do arquivo ondeexpressãofoi encontrada (e seexpressãoaparece mais de 1 vez no mesmo arquivo, o nome desse arquivo aparecerá mais de uma vez na saída padrão).A saída do comando
grepé estrutura na formacaminho-do-arquivo:conteúdo-da-linha, e como queremos apenas o nome do arquivo, utilizamos o comandocutpara dividir a entrada em 2 colunas (usando como delimitador o caracter dois-pontos), e dessas colunas utilizar somente a primeira.A saída do comando
cutserá um fluxo com um nome de arquivo por linha, mas podendo conter nomes de arquivos que aparecem em mais de 1 linha. O comandouniqelimina 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.
