2009-07-28 28 views
6

Tengo una colección de archivos de texto Unicode (exportados desde regedit) y me gustaría sacar todas las líneas con un cierto texto en ellos.Programa gratuito para grep archivos de texto Unicode en Windows?

He intentado Grep for Windows y findstr pero ambos parecen no poder manejar la codificación Unicode. Mis resultados están vacíos, pero cuando uso la opción -v (mostrar líneas que no coinciden), el resultado muestra un NUL entre cada carácter.

¿Hay alguna opción gratuita para realizar un simple grep en archivos Unicode en Windows?

+0

uso encontrar, no findstr. – Chalky

Respuesta

8

Acabo de encontrar grepWin que funciona perfectamente para lo que quiero aquí. Ojalá lo hubiera encontrado antes!

0

¿es cygwin una opción para usted? tal vez el grep que se builtin se comporta mejor que el que ha intentado ...

respecto

+0

Desafortunadamente, esa no ha sido mi observación. Estoy lidiando con este problema, y ​​Cygwin GREP fue lo primero que probé. Tanto Cygwin GREP como UnxUtils GREP solo parecen encontrar resultados si convierto los archivos a ASCII (o al menos a UTF-8). – user1172763

0

de verificación a cabo BareGrep. Creo que hará lo que quieras.

+0

Programa bastante genial, pero parece que no funciona con texto Unicode. ¿Me falta algo? – jacobsee

+0

Personalmente no lo he cansado con Unicode, pero su propaganda de ventas dice que sí. podrían (y probablemente lo son), por supuesto, estar mintiendo. –

+0

No maneja los archivos UTF16 (tengo la versión pro), y estaba buscando una herramienta de reemplazo cuando llegué a esta página. – scottwed

9

Pues bien, mientras findstr no puede manejar archivos Unicode directamente, type hace y findstr maneja realmente Unicode de entrada sin problemas.

Así que lo que tiene que hacer sería sólo

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

No he tenido ningún problema con findstr y unicode. Parece que funciona bien. También debería agregar que puede buscar con expresiones regulares pasando el modificador/r. Al igual que grep, también tiene ignorar mayúsculas y minúsculas, y solo archivos de listas, etc. –

+1

esto funciona para un único archivo, sigue buscando un reemplazo de grep para que pueda elegir una sola línea de cada uno de muchos archivos, cada uno en su propio subdirectorio – jacobsee

+0

Puede combinar esto fácilmente con 'for/r' para recorrer un árbol de directorios recursivamente. – Joey

0

Perl -CSD -ne 'impresión si m {\ qTu texto aquí \ E}' archivo.txt

3

definitivamente ir con cygwin (usando el servidor x): la última versión es compatible con utf8. En mi último concierto, trabajé mucho con personajes de CJK. Utilizando el servidor x de cygwin, puede buscar cualquier carácter y mostrar los caracteres para los que tenga una fuente de ancho fijo. También consulte od y xxd, lo que hace que sea fácil ingresar sus búsquedas usando caracteres hexadecimales, por ejemplo: $ echo '?' | grep $ (echo '3f' | xxd -p -r)

+2

Soy un gran defensor de Cygwin, y creo que su GREP probablemente tenga éxito con la entrada UTF-8. Pero puedo decirles que incluso las últimas versiones de Cygwin GREP no pueden tratar eficazmente con UCS-16. No culpo tanto a Cygwin como a la mentalidad de "codifiquemos todos los personajes como unidades de 16 bits" que nos dio UCS-16. ¡Vaya, una nueva arruga arquitectónica que no es adecuada para lo que está tratando de lograr * ni *! ¡Es compatible con ningún código existente! Gracias, 1991! – user1172763

1

no he utilizado las ventanas durante años, pero sé que dos alternativas a grep que están escritos en lenguaje interpretado y por lo tanto debería funcionar en cualquier plataforma:

Ambos son la herramienta de línea de comandos, pero supongo que ya tiene una solución para esto si usted ha usado grep para las ventanas.

Eche un vistazo a ellos, lamento no poder ayudar a un compañero grepper mejor que esto.

3

Si tiene Notepad ++, puede usar la opción "Buscar en archivos ..." para buscar archivos Unicode.

+0

Muy útil - Yo * siempre * tengo Notepad ++ ... –

1

Puede usar dnGREP. Es otra herramienta grep de código abierto que admite el tipo de archivo Unicode.

+0

fyi, requiere .NET 4.0 – jacobsee

0

Creo que el programa gratuito más conveniente que necesita en Windows es Powershell. Por ejemplo:

Get-ChildItem -Recurse -path c: \ temp \ * c | Seleccionar cuerdas -pattern "myunicodestring"

O si lo que sólo desea buscar en un directorio (no en el subdirectorio.):

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

Cuestiones relacionadas