2009-06-22 6 views

risposta

14

amo ack:

Cosa preferisci scrivere?

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

$ ack pattern

+0

ack --python foo è dolce! –

+0

ack è le api ginocchia. – seth

4

Potresti scoprire che il tuo guscio ti aiuta. Per esempio, in zsh, si può fare

grep foo **/*.py 

a condizione che il numero di file .py non superi il numero massimo di argomenti consentiti per un comando (64k?). Nota che puoi qualificare il file globbing ad es.

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

che vi darà tutto modificato nelle ultime 5 ore.

+0

non meglio, quasi lo stesso numero di tasti; –

+0

Quindi il globbing zsh –

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

Questa è una strana definizione della parola "less" – skaffman

+0

Sì. Meno catene mi sembrano meno preoccupanti, ma OP non ha chiesto meno preoccupazioni, ha chiesto meno battitura. Modificato su qualcosa in realtà più breve. Leggermente. – chaos

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

Suggerimento: termina l'espressione exec con un '+' invece di ';', che farà trovare di inviare tutti i file corrispondenti a un singolo processo di grep invece di crearne uno nuovo per ogni file corrispondente. Molto più efficiente in questo modo. –

2

zsh ha globbing ricorsiva, in modo da poter fare

grep foo **/*.py 

Look ma, senza trovare :)

UPDATE: Oh, anche se si fa qualcosa di molto lo non fa male ad alias o scrive una funzione per esso ovviamente

+0

Data l'abilità di zsh di fare ciò, devo a malapena dovermi scontrare con la sintassi arcana di find –

2

Si chiama grep * wink * :-)

Tutti py nella directory corrente

grep -R foo *.py 

Tutti i file in corso e qualsiasi sub-directory

grep -R foo . 
+1

+1: -R è standard nella maggior parte dei comandi UNIX anche per scansionare ricorsivamente le sottodirectory. – Powerlord

+7

Non hai bisogno di citare o sfuggire al tuo globbing? Altrimenti la shell lo espanderà nella directory corrente? –

+0

Hai ragione su quello – jitter

3

Hai provato ack.

+0

sì, ack è un ottimo sostituto di grep (almeno per i programmatori) – dfa

0

Uso molto la coppia find/grep, anche se con ancora più condizioni, ad esempio file esclusi nelle directory .svn. Lo faccio così tanto che ho appena creato degli script attorno a queste invocazioni, quindi posso chiamare "src-grep ..." e farlo fare fondamentalmente ciò che stai facendo qui. (Poi ho aggiunto un'estensione opzionale per un certo numero di linee di contesto da passare al flag grep -C, se fornito, e una versione separata per grep i risultati per le istruzioni di definizione.)

Questo è più utile e più veloce di ricorsivo Grep per me.

Problemi correlati