GREP - trovare tutte le occorrenze di una stringa
-
21-09-2019 - |
Domanda
Ho ricevuto il compito bianco etichettatura di un'applicazione in modo che essa non contiene riferimenti alla nostra società, sito web, etc.Il problema che ho sono in esecuzione in è che ho molti modelli diversi, per cercare e desidera garantire che tutti i modelli sono rimossi.Dal momento che l'applicazione non è stata sviluppata in-house (del tutto), non possiamo semplicemente cercare occorrenze nei messaggi.proprietà e il gioco è fatto.Dobbiamo passare attraverso JSP, codice Java e xml.
Io sono l'uso di grep per filtrare i risultati come questo:
grep SOME_PATTERN . -ir | grep -v import | grep -v // | grep -v /* ...
I modelli sono fuggiti quando io li sto usando la riga di comando;tuttavia, non credo che sia questo il pattern matching è molto robusto.Ci potrebbe essere occorrenze di importazione in loro (improbabile) o anche /* (l'inizio di un commento javadoc).
Tutto il testo di output a schermo, deve venire da una stringa di dichiarazione da qualche parte o un file costanti.Così, posso supporre posso trovare qualcosa di simile:
public static final String SOME_CONSTANT = "SOME_PATTERN is currently unavailable";
Vorrei trovare tale occorrenza anche come:
public static final String SOME_CONSTANT = "
SOME_PATTERN blah blah blah";
In alternativa, se abbiamo avuto un interno crawler / test automatizzati, si potrebbe semplicemente tirare indietro la xhtml da ogni pagina e verificare la fonte per garantire che è stato pulito.
Soluzione
Vorrei utilizzare sed , non grep !
Sed è utilizzato per eseguire le trasformazioni di testo di base su un flusso di input.
Prova opzione s/regexp/replacement/
con il comando sed.
Si può anche provare awk di comando. Ha un'opzione -F per la separazione campi, è possibile utilizzarlo con ; per separare le righe di voi file con ;.
La soluzione migliore sarà comunque un semplice script in Perl o Python .
Altri suggerimenti
Per affrontare la vostra preoccupazione la mancanza di alcune occorrenze, perché non filtro progressivamente:
- Creare un file di testo con tutti i possibili partite come un punto di partenza.
- Usare il filtro X (grep per '^importazione', per esempio) per eseguire il dump probabile false positivi in un file tmp.
- Usare il filtro di nuovo X per rimuovere quelle partite dal vostro file di lavoro (un copia di [1]).
- Fare una rapida passata di tmp file e aggiungere qualsiasi reale le partite di ritorno in.
- Ripetere [2]-[4] con altri filtri.
Questa operazione potrebbe richiedere un po ' di tempo, naturalmente, ma non sembra che questo è qualcosa che si desidera avere sbagliato...