Usando grep para procurar arquivos fornecidos por achado: o que está errado com o achado. | xargs grep '...'?
Pergunta
Quando eu uso o comando:
find . | xargs grep '...'
Eu recebo os jogos errados. Estou tentando procurar o ...
corda em todos os arquivos na pasta atual.
Solução
Como Andy White disse, você tem que usar fgrep
, a fim de corresponder para .
simples, ou escapar os pontos.
Então, você tem que escrever (-type f
é só para ter os arquivos:. Obviamente você não quer que os diretórios):
find . -type f | xargs fgrep '...'
ou se você ainda quiser usar grep:
find . -type f | xargs grep '\.\.\.'
E se você quiser apenas o atual e não seus subdiretórios:
find . -maxdepth 1 -type f | xargs fgrep '...'
Outras dicas
'' corresponde a qualquer caractere, assim você estará encontrando todas as linhas que contêm 3 ou mais caracteres.
Você pode escapar os pontos, como este:
find . | xargs grep '\.\.\.'
Ou você pode usar fgrep, que faz uma correspondência literal em vez de um jogo regex:
find . | xargs fgrep '...'
(Algumas versões do grep também aceitam uma bandeira -F que faz com que se comportem como fgrep.)
@OP, se você estiver procurando por arquivos que contenham ...,
grep -R "\.\.\." *
Se você está literalmente digitando grep '...'
você vai coincidir com praticamente qualquer string. Eu duvido que você está realmente escrevendo '...'
para o seu comando grep, mas se você é, o ...
irá corresponder a qualquer três caracteres.
Por favor, poste mais informações sobre o que você está procurando, e talvez alguém possa ajudá-lo mais.
Se você está procurando um nome que partidas, tente:
find . -name "filename pattern"
ou
find . | grep "filename pattern"
Se você está procurando procurando arquivos que jogo (ou seja, ele contém a cadeia grep)
find . | xargs grep "string pattern"
funciona bem. ou simplesmente:
grep "string pattern" -R *
Para completar a resposta de Jeremy, você também pode querer experimentar
find . -type f | xargs grep 'your_pattern'
ou
find . -type f -exec grep 'your_pattern' {} +
O que é semelhante a um xargs
eu poderia acrescentar: RTFM! Ou de um modo mais educado: uso e abuso de
man command
!