Uso de grep para buscar archivos proporcionados por find: lo que está mal con find. | xargs grep '& # 8230;'?

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

Pregunta

Cuando uso el comando:

find . | xargs grep '...'

Tengo las coincidencias incorrectas. Estoy intentando buscar la cadena ... en todos los archivos de la carpeta actual.

¿Fue útil?

Solución

Como dijo Andy White, tienes que usar fgrep para coincidir con el simple . , o escapar de los puntos.

Así que tienes que escribir ( -type f es tener solo los archivos: obviamente no quieres los directorios):

find . -type f | xargs fgrep '...'

o si todavía quieres usar grep:

find . -type f | xargs grep '\.\.\.'

Y si solo quieres el directorio actual y no sus subdirectorios:

find . -maxdepth 1 -type f | xargs fgrep '...'

Otros consejos

'.' coincide con cualquier carácter, por lo que encontrarás todas las líneas que contengan 3 o más caracteres.

Puedes escapar de los puntos, como esto:

find . | xargs grep '\.\.\.'

O puede usar fgrep, que hace una coincidencia literal en lugar de una coincidencia de expresiones regulares:

find . | xargs fgrep '...'

(Algunas versiones de grep también aceptan una marca -F que hace que se comporten como fgrep.)

@OP, si busca archivos que contengan ...,

grep -R "\.\.\." *

Si literalmente estás escribiendo grep '...' , coincidirás con casi cualquier cadena. Dudo que en realidad esté escribiendo '...' para su comando grep, pero si lo está, ... coincidirá con cualquiera de los tres caracteres.

Publique más información sobre lo que está buscando, y tal vez alguien pueda ayudarlo más.

Si está buscando un nombre de archivo que coincida, intente:

find . -name "filename pattern" 

o

find . | grep "filename pattern"

Si estás buscando archivos que coincidan (es decir, contiene la cadena grep)

find . | xargs grep "string pattern"

funciona bien. o simplemente:

grep "string pattern" -R *

Para completar la respuesta de Jeremy, es posible que también quieras probar

find . -type f | xargs grep 'your_pattern'

o

find . -type f -exec grep 'your_pattern' {} +

Que es similar a un xargs

Yo podría agregar: RTFM! O de una manera más educada: use & amp; abuso de

man command

!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top