Sto usando egrep per cercare la nostra base di codice, ma a circa 300 MB di codice sorgente che inizia ad essere un po 'lento. Come si cerca la base di codice?
Controlla ack da link .
ack is a tool like grep, designed for programmers with large trees of heterogeneous source code.
ack is written purely in Perl, and takes advantage of the power of Perl's regular expressions.
Dal sito:
Top 10 reasons to use ack instead of grep.
- It's blazingly fast because it only searches the stuff you want searched.
- ack is pure Perl, so it runs on Windows just fine.
- The standalone version uses no non-standard modules, so you can put it in your
~/bin
without fear.Searches recursively through directories by default, while ignoring .svn, CVS and other VCS directories. Which would you rather type?
$ grep pattern $(find . -type f | grep -v '\.svn') $ ack pattern
ack ignores most of the crap you don't want to search
- VCS directories
- blib, the Perl build directory
- backup files like foo~ and #foo#
- binary files, core dumps, etc
- Ignoring .svn directories means that ack is faster than grep for searching through trees.
Lets you specify file types to search, as in --perl or --nohtml. Which would you rather type?
$ grep pattern $(find . -name '*.pl' -or -name '*.pm' -or -name '*.pod' | grep -v .svn) $ ack --perl pattern
Note that ack's
--perl
also checks the shebang lines of files without suffixes, which the find command will not.File-filtering capabilities usable without searching with
ack -f
. This lets you create lists of files of a given type.$ ack -f --perl > all-perl-files
Color highlighting of search results.
- Uses real Perl regular expressions, not a GNU subset.
Allows you to specify output using Perl's special variables. Example:
ack '(Mr|Mr?s)\. (Smith|Jones)' --output='$&'
Many command-line switches are the same as in GNU grep:
- -w does word-only searching
- -c shows counts per file of matches
- -l gives the filename instead of matching lines
- etc.
- Command name is 25% fewer characters to type! Save days of free-time! Heck, it's 50% shorter compared to
grep -r
.
Inoltre, c'è questo:
[BinaryMuse ~]: ack --thpppt
_ /|
\'o.O'
=(___)=
U ack --thpppt!
Con Visual Studios "Trova nei file".
Se il tuo codice base diventa troppo grande potrebbe essere il momento di dividerlo in parti. Allora saprai in quale parte fare la tua ricerca e dovrebbe andare più veloce.
AgentRansack è tutto ciò di cui hai bisogno, super veloce.
Altrimenti RegExBuddy .
Bene, il primo modo per cercare è il tuo IDE, che sia CodeBlocks, Eclispe, IntelliJ o Visual Studio (o qualsiasi altra cosa) che è destinato ad avere un indice del codice esistente nel progetto e le sue dipendenze.
Quando vogliamo dare un'occhiata al codice di qualcun altro al lavoro, abbiamo un'istanza di OpenGrok . È incredibilmente veloce, davvero, in genere richiede meno di un secondo per darti i risultati della tua ricerca. L'ho usato solo, non configurato, quindi non conosco il lato admin delle cose.
Ho visto luoghi che utilizzano Google Search Appliance per cercare codice. Probabilmente questo è eccessivo, anche per 300 MB di codice sorgente. È possibile impostare qualcosa di un po 'più economico usando Apache Solr e un'interfaccia web personalizzata. Potrebbe anche esserci una soluzione pronta per l'uso su queste linee (anche se non ne sono personalmente a conoscenza)
Oltre a questo, di solito utilizzo anche "Trova nei file" di Visual Studio. Dal momento che ha la possibilità di fare una ricerca basata su espressioni regolari o sub-string, e una ricerca basata su sottostringa è molto più veloce, potresti provare anche qualcosa di simile.
Cscope con vim per la vista generale del progetto. Consente di saltare alla definizione, ai chiamanti, ai simboli di ricerca o grep per gli identificatori o per passare a un file. Cscope funziona molto bene con il codice C ma armeggia con C ++. ctag esuberanti con taglist plugin per vim per panoramica di file. I ctag esuberanti funzionano bene con C ++ (in realtà sono supportate oltre 40 lingue), ma non supportano il salto ai chiamanti.
Poi c'è un buon vecchio grep per una ricerca rapida e sporca all'interno di un albero dei sorgenti.
In realtà in qualche modo grep potrebbe essere il tuo migliore amico! Grep gestirà enormi quantità di dati e potrai raggruppare più greps per ottenere esattamente quello che desideri.
Naturalmente anche essere in grado di utilizzare solo sottoinsiemi del tuo codice base può essere utile.
Il mio ambiente di sviluppo principale è Mac OS X e trovo Spotlight molto utile quando ad es. Sto cercando uno snippet di codice che posso riutilizzare.
Quando sono su Linux, di solito utilizzo una combinazione di Trova + grep .
Due modi:
Il " Ricerca nel codice sorgente incorporato in Github che è molto veloce
La funzione "Trova nei file" dell'IDE se cerco località che non sono state ancora inserite nel repository
Puoi diventare molto specifico con Finder
di Mac OSX
O utilizza find
, locate
e i diversi sapori di grep
Utilizza fgrep
se puoi cercare senza espressioni regolari per ottenere risultati più velocemente.
Molti ambienti in questi giorni useranno una sorta di indicizzatore per aiutare l'utente a localizzare dove sono definite varie funzioni e variabili. È fantastico se ce l'hai, e non così eccezionale se non lo fai. Se sei interessato principalmente a dove è definita la routine o variabile, ci sono un certo numero di tecniche che possono essere utilizzate per facilitare quella ricerca. Se tuttavia stai cercando di determinare dove sono utilizzati e non hai un indicizzatore, 'grep' (oi suoi derivati) sono probabilmente la soluzione migliore.
Intestazioni di funzioni. Come parte degli standard di codifica nella maggior parte dei posti in cui ho lavorato, ogni routine richiede un commento di una struttura specifica per precederlo. Parte di questo commento include il nome di routine seguito da uno spazio, che a sua volta è seguito da un carattere speciale. A seconda della compagnia, questo personaggio speciale è stato in genere un '-' o un ':'. Ciò non solo semplifica la ricerca della routine quando sai che si trova nel file in cui ti trovi, ma aiuta anche a ottenere risultati chiari e leggibili quando esegui ...
grep -lrw 'routineName -' *
Convenzioni di denominazione di routine. Tendiamo a denominare le routine utilizzando il modello sottostante. Di conseguenza, basandoci esclusivamente sull'abbreviazione del modulo nel nome, di solito possiamo capire abbastanza rapidamente dove è definita la routine.
< abbreviazione del modulo > < sostantivo > < verbo >
Convenzioni di denominazione variabili. Tendiamo a nominare le nostre variabili in un modo simile al modo in cui denominiamo le nostre routine. Ancora una volta, l'abbreviazione del modulo ci aiuta a determinare dove è definita la variabile.
< abbreviazione del modulo > < descrizione >
Spero che questo aiuti.
Il software Funduc ha un trio di ricerca e sostituzione dei programmi. Ho solo il Search and Replace Classic , che utilizzo ogni volta che ho bisogno di cercare qualcosa nella mia intera struttura di ricerca. Funziona molto bene, anche con migliaia di file.
Leggi altre domande sui tag search