2009-06-22 17 views

Respuesta

14

Me encanta ack:

¿Qué prefieres escribir?

$ grep pattern $(find . -type f | grep -v '\.svn')

$ ack pattern

+0

ack --python foo es dulce! –

+0

ack son las rodillas de las abejas. – seth

4

Es posible que su caparazón le ayude. Por ejemplo, en zsh, puede hacerlo

grep foo **/*.py 

siempre que el número de archivos .py no exceda el número máximo de argumentos permitidos para un comando (64k?). Tenga en cuenta que puede calificar el archivo globbing, p.

grep foo **/*.py(mh-5) 

que le dará todo lo modificado en las últimas 5 horas.

+0

no es mejor, casi el mismo número de teclas; –

+0

De ahí el zsh globbing –

1
grep -r --include='*.py' foo * 
+3

Esa es una extraña definición de la palabra "menos" – skaffman

+0

Sí. Menos encadenamiento me parece menos preocupante, pero OP no pidió menos preocupaciones, pidió menos tipeo. Editado a algo realmente más corto. Ligeramente. – chaos

1
find . -name "*.py" -exec grep -H foo '{}' ';' 
+3

Consejo: finalice su expresión ejecutiva con un '+' en lugar de ';', que hará que find envíe todos los archivos coincidentes a un único proceso grep en lugar de bifurcar uno nuevo para cada archivo coincidente. Mucho más eficiente de esa manera. –

2

zsh tiene el englobamiento recursivo, por lo que puede hacer

grep foo **/*.py 

ma Mira, sin hallazgo :)

ACTUALIZACIÓN: Ah, también si haces algo que muchos no duele alias o escribir una función para él, por supuesto

+0

Dada la capacidad de zsh para hacer esto, apenas tengo que meterme con la sintaxis misteriosa de Find –

2

Se llama grep * wink * :-)

Todo py en el directorio actual

grep -R foo *.py 

Todos los archivos de la corriente y cualquier subdirectorio

grep -R foo . 
+1

+1: -R es estándar en la mayoría de los comandos de UNIX para también escanear subdirectorios recursivamente. – Powerlord

+7

¿No necesita citar o escapar de su globbing? De lo contrario, el shell expandirá esto en el directorio actual? –

+0

Tienes razón sobre eso – jitter

3

Ha intentado ack.

+0

sí, ack es un gran reemplazo para grep (al menos para programadores) – dfa

0

Utilizo mucho algo parecido a su par find/grep, aunque con aún más condiciones, excluyendo archivos en directorios .svn, por ejemplo. Hago tanto que acabo de crear guiones para estas invocaciones, así que puedo llamar a "src-grep ..." y hacer básicamente lo que estás haciendo aquí. (Luego agregué una extensión opcional para un número de líneas de contexto para pasar al indicador grep -C, si se proporciona, y una versión separada para grep los resultados para las declaraciones de definición.)

Esto es más útil y más rápido que recursivo grep para mí

Cuestiones relacionadas