Use o comando grep e localize

4

Como posso fazer com que o comando grep localize certas palavras nos arquivos especificados pelas rotas encontradas pelo comando locate?

locate my.cnf | grep user   

(Eu quero que o comando grep pesquise a palavra "user" nos arquivos encontrados para o comando locate)

    
por Jhonathan 10.09.2012 / 17:31

3 respostas

9

Se os resultados da sua pesquisa retornarem caminhos sem espaços, você poderá usar xargs da seguinte forma:

locate my.cnf | xargs grep user

No entanto, você deve ter o hábito de se proteger para lidar com casos em que um caminho ou nome de arquivo possa conter um espaço dizendo xargs para usar null como separador e informando locate (ou qualquer programa que você seja usando para retornar strings) para também enviar isso como o separador assim:

locate -0 my.cnf | xargs -0 grep user

Isso funcionaria mesmo que seu caminho incluísse espaços em branco como /name with space/my.cnf .

    
por 10.09.2012 / 17:52
1

Se bem entendi, você poderia fazer algo assim:

#!/bin/sh
typeset what1=$1
typeset what2=$2
[ "$#" -eq 2 ] || { echo "Two arguments expected"; exit 1; }
locate ${what1} | while read file; do
    grep ${what2} ${file} /dev/null
    done

Isso pesquisa os arquivos que correspondem ao argumento locate ( what1 ) para uma sequência que corresponde a what2 . O argumento dev/null força grep a relatar o nome do arquivo de uma correspondência.

    
por 10.09.2012 / 17:52
1

One-liner:

for file in $(locate my.cnf) ; do grep -r user "$file" ; done

Se você quiser pesquisar o padrão nos arquivos sob o nome do diretório que obteve do locate, então -r cuidará dele, caso contrário, remova -r .

    
por 10.09.2012 / 23:08