Como você procura texto específico em tipos de arquivo específicos? [duplicado]

13

Possível duplicado:
Como posso grep nos arquivos de origem para algum texto?

Qual é o comando para procurar texto específico em tipos de arquivos específicos, recursivamente, no diretório atual?

Phillip
fonte
O que você quer devolver? a linha em que o texto está? o nome do arquivo em que o texto está?
precisa saber é o seguinte
@MaQleod: Isso seria bom (nome do arquivo + número da roupa + trecho), se isso for possível.
Phillip
@slhck: o ack-grep não está instalado; Não tenho permissões para instalá-lo.
Phillip
1
Você não precisaria ack-grep, você pode usar os exemplos da pergunta como iniciado (como eu disse), ou seja, as find | xargs | greplinhas. Para a saída específica, man grepé sempre útil ler.
slhck
@ slhck: Obrigado, eu fiz grep -r --include=*.<type> "<string>" ., o que funcionou. Infelizmente, a página de manual não é muito direta ao mencionar o ponto final.
Phillip

Respostas:

11
find . -type f -name '*.extension' | xargs grep "string"

Este comando executa find no diretório local (.) Para quaisquer arquivos com nomes que correspondam ao padrão * .extension, depois executa grep para "string" nos resultados da localização . Observe que a localização é inerentemente recursiva. Contanto que você possa diferenciar os arquivos desejados dos que não são baseados no nome, isso funcionará para você.

Fopedush
fonte
2
Isso quebra com nomes de arquivos que contêm espaços; você deve usar a print0opção para ser mais seguro.
slhck
find -print0não vai ajudar, também use xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo
0

Para listar o nome do arquivo, o número da linha no arquivo especificado e a linha que o texto aparece:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

Ele será executado apenas no diretório atual, mas o formatará muito bem para você.

MaQleod
fonte