2012-07-24 5 views
41

Con il normale comando grep c'è un'opzione --exclude (trattata in dettaglio qui: Use grep --exclude/--include syntax to not grep through certain files) che consente di ignorare file specifici durante l'inattività.Come si esclude un file specifico da ack (ack-grep)?

L'opzione di Ack --type si occupa del 95% dei casi in cui si desidera escludere i file, ma non gestisce (per quanto posso dire) il caso dell'esclusione di un file specifico. Ho un file JS compilato che contiene il contenuto di ogni altro file JS (su una sola riga), quindi ogni volta che grep per qualcosa Riesco a recuperare l'intero contenuto di quel file gigante compilato.

Mi dispiacerebbe dover rinunciare in ack e tornare indietro su questo, ma è davvero fastidioso. Per favore, qualcuno mi dice che esiste un modo per escludere file specifici dalle ricerche ack.

risposta

11

No, ack 1.x non consente di escludere un singolo file. In ack 2.0, è possibile. ack 2.0 era al momento nella sua prima alpha ora è la versione corrente consigliata di Ack.

Per quanto riguarda il caso specifico del file Javascript minified, quale versione di ack stai usando? ack 1.96 dovrebbe ignorare JavaScript minisito basato sull'estensione. Se il controllo dell'estensione non funziona, probabilmente potresti hackerare ack stesso, dal momento che si tratta di un singolo programma Perl. È possibile modificare la funzione is_searchable.

Nella versione 2.0, stiamo cercando di ignorare qualsiasi riga, ad esempio, 500 caratteri perché chiaramente non è il codice sorgente.

Si potrebbe anche voler unirsi a noi sulla mailing list ack-users. Siamo piuttosto sensibili.

+0

In effetti, la mia prossima fermata sarebbe stata la mailing list, ma ho pensato di controllare qui prima per assicurarmi che non mi mancasse qualcosa di ovvio :-) Grazie Andy. – machineghost

+0

P.S. Sto scegliendo il nome del file per il mio file JS compilato, quindi al momento è solo built.js. Proverò a rinominarlo in built.min.js e vedere se questo aiuta. – machineghost

84

ignorare un singolo file utilizzando ACK 2.0, forniscono una specifica filtro per la bandiera --ignore-file:

--ignore-file=is:cljout.js

+1

Qual è il 'è:' facendo qui? –

+3

Corrispondenza esatta del nome file. http://beyondgrep.com/documentation/ack-2.04-man.html#is_filename –

+4

Questo funziona per me sui nomi di file, ma non se voglio dare un file specifico (cioè percorso e nome file). – tremby

1

anche bene sapere con ack2.0, è possibile specificare queste opzioni in a .ackrc file se devi filtrare frequentemente i file.

2

Se si esegue ack --create-ackrc, verrà generato un intero gruppo di preimpostazioni per file comuni come javascript minisito, css e directory come node_modules e .git. Molto utile!

Ecco l'opzione js minified:

# minified Javascript 
--ignore-file=match:/[.-]min[.]js$/ 
--ignore-file=match:/[.]js[.]min$ 

Se si desidera salvare questo per .ackrc corsa

ack --create-ackrc >> ~/.ackrc 

e quindi eliminare quello che non è necessario da quel file.