2014-09-05 14 views
18

So come cercare una singola stringa in diversi file contemporaneamente con Sublime 3 (spiegato here).Ricerca di stringhe multiple in diversi file con Sublime 3

Quello che devo fare è cercare più stringhe in diversi file. Ho cercato di andare a Find in files e impostazione:

Field: string1 \& string2 
Where: /path_to_folder_containing_the_files_I_want_to_ search/ 

(dove string1 e string2 sono le corde che voglio cercare), ma questo non sembra funzionare.

Questo può essere fatto a tutti?

+0

Gabriel, penso che la tua domanda sarebbe meglio su http://superuser.com – samy

+0

@samy perché? Ci sono migliaia di domande riguardo a 'Sublime' qui, basta cliccare sui tag per vedere. – Gabriel

+2

Sì, sono d'accordo; questa mi sembrava una domanda sul software di calcolo generale per me, non sulla programmazione, quindi pensavo che il tag sublime sul superuser fosse più logico: http: // superuser.it/questions/tagged/sublime-text-3 – samy

risposta

25

Ho appena trovato questa vecchia domanda e ho pensato di aggiungere la mia soluzione, che potrebbe essere utile per qualcuno in futuro.

Sublime supporta la ricerca in tutte le cartelle aperte e può utilizzare regex. Quindi, utilizzando entrambi, è possibile aprire o aggiungere tutte le cartelle che si desidera cercare nel progetto e utilizzare espressioni regolari per cercare più parole chiave. Nel tuo caso, sarebbe il seguente (assicuratevi di controllare la casella .* icona di regex):

Find: (string1|string2) 
Where: <open folders> 
+0

Quando si usa un'espressione regolare al posto di 'string1', 'stringa2' su 4 stringhe o più, l'espressione regolare si blocca con l'errore: "La complessità di corrispondenza dell'espressione regolare ha superato i limiti predefiniti. Provare a refactoring dell'espressione regolare per rendere ogni scelta effettuata dalla macchina statale inequivocabile. " Questo è legato a questo tipo di ricerca? – john

+1

@john: puoi pubblicare il tuo regex di esempio? Ho appena provato con semplici 4 opzioni, e funziona bene sul mio. – Sherzod

+0

a quanto pare stavo reindirizzando ogni singola stringa, piuttosto che incapsulare l'intero insieme nel suo complesso, e questo ha causato il crash. Per esempio. Volevo questo: '^. * (?: string1 | stringa2 | stringa3). * $' – john

0

No, è possibile cercare una sola cosa alla volta in Sublime, come la maggior parte degli altri editor di cui sono a conoscenza. L'unico modo possibile è utilizzare la ricerca regex (fai clic sul pulsante all'estrema sinistra del campo quando inserisci il termine di ricerca) e ottieni una buona espressione regolare che corrisponda a tutte le cose che stai cercando. Oppure, puoi cercare ogni partita una alla volta.

In alternativa, si consideri spazzolatura su riga di comando utilità text-elaborazione standard come grep, sed, awk, ecc Combinando il loro potere con la capacità di comando di tubazioni della shell consentono di eseguire comandi come:

grep -e "foo" *.txt | grep -e "bar" 

che la ricerca in tutti i .txt file nella directory corrente per il modello foo, allora tutte le linee risultanti sarà nuovamente cercato il modello bar, in modo che il risultato finale avrà sia foo e bar in loro, in qualsiasi ordine.

+0

Ho bisogno di cercare l'occorrenza di entrambe le stringhe nello stesso tempo in un file, quindi cercarle una alla volta non funzionerà senza un po 'di lavoro extra sul mio parte. Grazie per aver chiarito che non è possibile, proverò a formulare alcune espressioni regolari. – Gabriel

+1

@Gabriel c'è un'altra opzione che ho appena pensato sulla strada di casa: potevi usare strumenti standard da riga di comando come 'grep',' awk', 'sed', ecc. Per cercare due cose contemporaneamente. Come semplice esempio, 'grep file.txt -e" pippo "| grep "bar" '. Questo cercherà 'foo' e' bar' sulla stessa riga, in qualsiasi ordine. Questo è piuttosto più difficile da fare con una singola regex. – MattDMo

+0

Se è possibile espandere questo file per utilizzarlo su più file contemporaneamente, è possibile aggiungerlo alla risposta come opzione valida. – Gabriel

1

Ho provato questo su Sublime Testo2, così dovrebbe funzionare su Sublime Testo3 pure.

campo: string1 string2 string3 string4 Dove:/path_to_folder_containing_the_files_I_want_to_ ricerca/

Nota: deselezionare il che significa un'espressione regolare e controllare "", che significa cercare l'intera parola '*.'.

Questo cercherà il modello "stringa1 stringa2 stringa3 stringa4" in tutti i file nella cartella indicata.

Problemi correlati