Usando grep para procurar arquivos fornecidos por achado: o que está errado com o achado. | xargs grep '...'?

StackOverflow https://stackoverflow.com/questions/1204781

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.

Foi útil?

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

!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top