terça-feira, 3 de agosto de 2010

Procurando arquivos com o grep

Olá,

hoje me deparei com um problema, eu queria saber qual módulo Python estava importando um outro modulo, mas não tinha a mínima idéia de que módulo era esse ou onde ele estava. A única coisa que sabia era que, com certeza, ele era um arquivo de texto e tinha a seguinte string:
import modulo

Pesquisando encontrei uma solução muito, mas muito simples, o maravilhoso grep.
Vamos ao mundo mágico do shell:


$ grep -rin "string" /*

Esse comando retorna todas os arquivos de texto que contenham a string

/home/cleiton/arquivo.txt:7:  'Essa era a string que eu queria'
/etc/arquivo.conf:263: 'Outra string que o grep retornou'

Vamos as explicações:

grep

grep é um aplicativo para linha de comando de sistemas Unix/Linux que faz buscas no conteúdo dos arquivos (ou input) procurando linhas que respeitem a expressão regular mencionada.(Wikipédia)

-rin


São parametros do grep.

-r indica recursividade, ou seja, ele vai procurar em todos os arquivos de todos os subdiretórios.

-i indica que não será case-sensitive , ou seja, não fará distinção entre maiúsculas e minúsculas. Caso queira diferenciar, remova o i dos parametros.


-n adiciona o número da linha correspondente à string.


"string"


Indica a string a ser procurada. No meu caso, a "string" foi substituida por "import modulo".



/*

Indica o caminho do diretório onde serão "iniciadas as buscas". Nesse caso é para quem não faz a mínima ideia de onde o arquivo esteja, assim ele começa do diretório raiz. Caso saibam onde ele possa estar, como /usr/local/lib/, por exemplo, substitua o /* por /usr/local/lib/*.



Para alguns, poderia ser utilizado o find (para recursividade) com o sed (para procurar a strig por método de expressão regular). Mas seria um pouco mais complicado e meu objetivo era ser o mais simples e rápido possível. Além disso o grep atendeu perfeitamente minha necessidade.

Abraços.

Nenhum comentário:

Postar um comentário