Durante la ricerca di codice per le stringhe, mi imbatto costantemente nel problema che ottengo risultati privi di significato e privi di contesto. Ad esempio, se una chiamata di funzione è suddivisa su 3 righe e cerco il nome di un parametro, ottengo il parametro su una riga da solo e non il nome della funzione.Come faccio a grep per intere, possibilmente avvolte, linee di codice?
Ad esempio, in un file contenente
...
someFunctionCall ("test",
MY_CONSTANT,
(some *really) - long/expression);
grep per MY_CONSTANT restituirebbe una linea che si presentava così:
MY_CONSTANT,
Allo stesso modo, in un blocco di commento:
/////////////////////////////////////////
// FIXMESOON, do..while is the wrong choice here, because
// it makes the wrong thing happen
/////////////////////////////////////////
Grepping per FIXMESOON fornisce la risposta molto frustrante:
// FIXMESOON, do..while is the wrong choice here, because
Quando ci sono migliaia di accessi, i risultati a riga singola sono un po 'privi di significato. Quello che mi piacerebbe fare è che grep sia consapevole dei punti di inizio e di arresto delle linee del codice sorgente, qualcosa di così semplice da considerare ";" come il separatore di riga sarebbe un buon inizio.
Punti bonus se è possibile farlo restituire l'intero blocco di commenti se l'hit è all'interno di un commento.
So che non puoi farlo solo con grep. Sono anche consapevole dell'opzione di avere grep restituire un certo numero di righe di contesto. Qualche suggerimento su come realizzare sotto Linux? Cordiali saluti, le mie lingue preferite sono C e Perl.
Sono sicuro di poter scrivere qualcosa, ma so che qualcuno deve averlo già fatto.
Grazie!
Boh, ma è una buona domanda! – mpen
al posto di una buona soluzione, puoi sempre usare grep's '-C n' per' n' linee di contesto –