2009-07-28 10 views
6

J'ai une collection de fichiers texte unicode (exportés de regedit) et j'aimerais sortir toutes les lignes avec un certain texte dessus.Programme gratuit pour grep les fichiers texte Unicode dans Windows?

J'ai essayé Grep for Windows et findstr mais les deux ne semblent pas pouvoir gérer le codage Unicode. Mes résultats sont vides, mais lorsque j'utilise l'option -v (afficher les lignes qui ne correspondent pas), la sortie affiche un NUL entre chaque caractère.

Existe-t-il des options gratuites pour effectuer un simple grep sur les fichiers Unicode sous Windows?

+0

utilisation trouver, non findstr. – Chalky

Répondre

8

Juste couru à travers grepWin qui fonctionne parfaitement pour ce que je veux ici. J'aurais aimé l'avoir trouvé plus tôt!

0

cygwin est une option pour vous? peut-être le grep qui builtin se comporte mieux que celui que vous avez essayé ...

ce qui a trait

+0

Malheureusement, cela n'a pas été mon observation. Je traite de cette question, et Cygwin GREP a été la première chose que j'ai essayé. Les deux GREEN Cygwin et UnxUtils GREP semblent seulement trouver des résultats si je convertis les fichiers en ASCII (ou au moins en UTF-8). – user1172763

0

check out BareGrep. Je pense que ça va faire ce que tu veux.

+0

Programme assez cool mais ne semble pas fonctionner avec du texte Unicode - ai-je raté quelque chose? – jacobsee

+0

Personnellement, je ne l'ai pas fatigué avec Unicode, mais leur propagande de vente dit qu'il le fera. ils pourraient (et sont probablement), bien sûr, mentir. –

+0

Il ne gère pas les fichiers UTF16 (je possède la version pro), et cherchait un outil de remplacement quand j'ai frappé cette page. – scottwed

9

Eh bien, alors que findstr ne peut pas gérer les fichiers Unicode directement, type fait et findstr gère en fait l'entrée Unicode sans problème.

Donc ce que vous devez faire serait tout simplement

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

Je n'ai eu aucun problème avec findstr et unicode. Ça semble fonctionner correctement. Aussi devrait ajouter que vous pouvez rechercher avec des expressions régulières en passant dans le commutateur/r. Comme grep il a aussi ignorer le cas, et liste les fichiers seulement etc –

+1

cela fonctionne pour un seul fichier - toujours à la recherche d'un remplacement grep afin que je puisse choisir une seule ligne de chacun des nombreux fichiers, chacun dans leur propre sous-répertoire – jacobsee

+0

Vous pouvez facilement combiner ceci avec 'for/r' pour parcourir une arborescence de répertoires de manière récursive. – Joey

0

perl -CSD -ne 'impression si m {\ Qyour texte ici \ E} file.txt

3

certainement aller avec cygwin (en utilisant x serveur) - la dernière prise en charge utf8. Lors de mon dernier concert, je travaillais beaucoup avec les personnages de CJK. En utilisant le serveur x de cygwin, vous pouvez rechercher n'importe quel caractère et afficher tous les caractères pour lesquels vous avez une police à largeur fixe. Consultez également od et xxd, ce qui facilite la saisie de vos recherches à l'aide de caractères hexadécimaux, par exemple: $ echo '?' | grep $ (echo « 3F » | xxd -p -r)

+2

Je suis un grand partisan de Cygwin, et je pense que son GREP ferait probablement bien avec l'entrée UTF-8. Mais je peux vous dire que même les dernières versions de Cygwin GREP ne peuvent pas traiter efficacement avec UCS-16. Je ne blâme pas Cygwin autant que je blâme la mentalité «encodons tous les caractères en unités 16 bits» qui nous a donné l'UCS-16. Gee, une nouvelle ride architecturale qui n'est ni adéquate pour ce qu'elle essaie d'accomplir * ni * compatible avec n'importe quel code existant! Merci, 1991! – user1172763

1

Je n'ai pas Windows utilisé depuis des années, mais je sais que deux alternatives à grep qui sont écrites dans un langage interprété et devrait donc fonctionner sur toute plate-forme:

Les deux sont l'outil de ligne de commande, mais je suppose que vous avez déjà une solution pour cela si vous avez utilisé grep pour windows.

Jetez un coup d'oeil à eux, je suis désolé, je ne peux pas aider un collègue meilleur que celui-ci.

3

Si vous avez le bloc-notes ++, vous pouvez utiliser l'option "Rechercher dans les fichiers ..." pour rechercher des fichiers Unicode.

+0

Très utile - J'ai * toujours * Notepad ++ ... –

1

Vous pouvez utiliser dnGREP. C'est un autre outil de grep open source qui supporte le type de fichier Unicode.

+0

fyi, nécessite .NET 4.0 – jacobsee

0

Je crois que le programme le plus pratique que vous avez besoin dans Windows est Powershell. Par exemple:

Get-ChildItem -Recurse -path c: \ temp \ * c | Select-String -pattern "MaChaîneUnicode"

Ou si vous voulez juste que la recherche dans un répertoire (pas sous-répertoire.):

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

Questions connexes