2009-07-28 2 views
6

Ho una collezione di file di testo Unicode (esportati da regedit) e mi piacerebbe tirare fuori tutte le linee con un certo testo su di loro.Programma gratuito per grep i file di testo Unicode in Windows?

Ho provato Grep for Windows e findstr ma entrambi non riescono a gestire la codifica Unicode. I miei risultati sono vuoti, ma quando uso l'opzione -v (mostra righe non corrispondenti), l'output mostra un NUL tra ogni carattere.

Ci sono delle opzioni gratuite per eseguire un semplice grep su file Unicode in Windows?

+0

Usa trovare, non findstr. – Chalky

risposta

8

Ho appena imbattuto in grepWin che funziona perfettamente per quello che voglio qui. Vorrei averlo trovato prima!

0

cygwin è un'opzione per te? forse il grep che è builtin si comporta meglio di quello che si è tentato ...

riguarda

+0

Sfortunatamente, questa non è stata la mia osservazione. Ho a che fare con questo problema e Cygwin GREP è stata la prima cosa che ho provato. Sia Cygwin GREP che UnxUtils GREP sembrano trovare risultati solo se converto i file in ASCII (o almeno in UTF-8). – user1172763

0

Scopri BareGrep. Penso che farà quello che vuoi.

+0

Bel programma, ma non sembra funzionare con testo unicode - mi manca qualcosa? – jacobsee

+0

Personalmente non l'ho stancato con Unicode, ma la loro propaganda commerciale dice che lo farà. potevano (e probabilmente lo sono), naturalmente, mentire. –

+0

Non gestisce i file UTF16 (sono proprietario della versione pro) e stavo cercando uno strumento di sostituzione quando ho colpito questa pagina. – scottwed

9

Ebbene, mentre findstr non è in grado di gestire i file direttamente Unicode, type fa e findstr maniglie in realtà Unicode ingresso senza problemi.

Così che cosa dovete fare sarebbe solo

type myfile.txt | findstr /c:"I'm searching for this" 
 
> type uc-test.txt 
Unicode test. äöüß 
Another line 
Something else 
> findstr "Something" uc-test.txt 

> findstr /v "Something" uc-test.txt 
■U n i c o d e t e s t . õ ÷ ³ ▀ 
A n o t h e r l i n e 
S o m e t h i n g e l s e 
> type uc-test.txt | findstr "Another" 
Another line 
+0

Non ho avuto problemi con findstr e unicode. Sembra funzionare bene. Inoltre, è necessario aggiungere che è possibile cercare con espressioni regolari passando l'opzione/r. Come grep ha anche ignorato il caso, ed elenca solo i file ecc. Ecc. –

+1

questo funziona per un singolo file - ancora in cerca di una sostituzione di grep in modo che io possa scegliere una singola riga da ognuno di molti file, ognuno nella propria sottodirectory – jacobsee

+0

Si può facilmente combinare questo con 'for/r' per camminare in modo ricorsivo su un albero di directory. – Joey

0

perl -CSD -ne 'di stampa se m {\ Qyour testo qui \ E}' file.txt

3

sicuramente andare con cygwin (usando x server) - l'ultimo supporta utf8. Al mio ultimo concerto, stavo facendo un sacco di lavoro con i personaggi CJK. Usando il server x di cygwin, puoi cercare su qualsiasi carattere e visualizzare i caratteri per i quali hai un carattere a larghezza fissa. Guarda anche od e xxd che ti permette di inserire facilmente le tue ricerche utilizzando caratteri esadecimali es: $ echo '?' | grep $ (echo '3F' | xxd -p -r)

+2

Sono un grande sostenitore di Cygwin, e penso che il suo GREP probabilmente andrebbe bene con l'input UTF-8. Ma posso dirti che anche le versioni più recenti di Cygwin GREP non riescono a gestire efficacemente UCS-16. Non incolpo Cygwin tanto quanto incolpare la mentalità di "codifica tutti i personaggi come unità a 16 bit" che ci ha dato UCS-16. Accidenti, una nuova ruga architettonica che non è né adeguata per quello che sta cercando di realizzare * né * compatibile con nessun codice esistente! Grazie, 1991! – user1172763

1

non ho usato le finestre per anni, ma so che due alternative a grep che sono scritti nel linguaggio interpretato e quindi dovrebbe funzionare su qualsiasi piattaforma:

Entrambi sono strumento da riga di comando, ma suppongo avete già una soluzione per questo se avete usato grep per le finestre.

Dai un'occhiata a loro, mi dispiace di non poter aiutare un tizio meglio di questo.

3

Se si dispone di Notepad ++, è possibile utilizzare l'opzione "Trova nei file ..." per cercare i file Unicode.

+0

Molto utile - I * always * have Notepad ++ ... –

1

È possibile utilizzare dnGREP. È un altro strumento grep open source che supporta il tipo di file unicode.

+0

fyi, richiede .NET 4.0 – jacobsee

0

Credo che il programma gratuito più conveniente di cui hai bisogno in Windows sia Powershell. Per esempio:

Get-ChildItem -Recurse -path c: \ temp \ * c | Select-String -pattern "myunicodestring"

O se semplicemente vogliono solo per cercare in una directory (non in sottodirectory.):

Select-String -path "c:. \ mydir \ * log" "errore" -pattern