J'ai une collection de fichiers texte UNICODE (exportés de Regedit) et j'aimerais tirer toutes les lignes avec un certain texte sur eux. P>
J'ai essayé Grep pour Windows et FindStr mais les deux ne peuvent pas sembler gérer le codage unicode. Mes résultats sont vides, mais lorsque j'utilise l'option -v (Afficher les lignes non correspondantes), la sortie montre une nul entre chaque caractère. P>
Y a-t-il des options libres pour effectuer un simple grep sur les fichiers Unicode sous Windows? P>
11 Réponses :
est Cygwin une option pour vous? Peut-être que le grep qui se comporte mieux que celui que vous avez essayé ... p>
considère p>
Malheureusement, cela n'a pas été mon observation. Je traite avec cette question et Cygwin Grep a été la première chose que j'ai essayée. Cygwin Grep et Unxutils Grep ne semblent que pour trouver des résultats si je convertitais les fichiers en ASCII (ou au moins vers UTF-8).
Découvrez Baregrep . Je pense que ça fera ce que tu veux. p>
Programme assez cool mais ne semble pas fonctionner avec un texte unicode - je manque quelque chose?
Personnellement, je ne l'ai pas fatigué avec Unicode, mais leur propagande de vente dit que ce sera. Ils pourraient (et sont probablement), bien sûr, mentir.
Il ne gère pas les fichiers UTF16 (je possède la version Pro) et recherchait un outil de remplacement lorsque je frappe cette page.
Eh bien, tandis que Alors, ce que vous devez faire serait simplement P> FindStr code> ne peut pas gérer les fichiers unicode directement,
Type code> fait et
FindStr code> gère réellement unicode entrée em > Sans problèmes.
> 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
Je n'ai eu aucun problème avec FindStr et Unicode. Semble fonctionner bien. Il faut également ajouter que vous pouvez rechercher des expressions régulières en passant dans le commutateur / R. Comme Grep, il a également ignoré le cas, et liste des fichiers seulement etc.
Cela fonctionne pour un fichier unique - à la recherche d'un remplacement Grep afin que je puisse choisir une seule ligne de chacun de nombreux fichiers, chacun dans son propre sous-répertoire.
Vous pouvez facilement combiner cela avec pour / r code> pour marquer une arborescence de répertoire récursive.
Merci, j'ai obtenu ce travail: pour / r %% d in (* .txt) do Type "%% d" | FindStr / C: "Rechercher texte" >> Outfile.txt Code> (maintenant J'adorerais comprendre un moyen de préfixer chaque ligne avec le nom et / ou l'horodatage du fichier, similaire à la valeur par défaut Comportement de Grep.)
emacs 23 a un support unicode et un beau système de recherche
Le premier exemple est légèrement trompeur en démontrant un malentendu commun de FindStr: type myfile.txt | FindStr "Je cherche ce" Code> ... va réellement rechercher je suis ou rechercher ou pour ou ceci - n'importe lequel des quatre mots séparés par l'espace.
type myfile.txt | FindStr / C: "Je cherche ce" code> ... recherche la phrase littérale. Cette fonctionnalité est très pratique ou quelque peu ennuyeuse en fonction de votre niveau d'expérience avec FindStr.
@Herbm, il suffit de modifier la réponse aurait été plus rapide ... ;-)
@Joey Désolé, je ne savais pas que c'était poli ou approprié. Ça ira.
@Herbm: Pour des choses incorrectes sur factuellement, je modifierais toujours que si la réponse est fraîche et peut toujours être éditée par l'auteur. Accordé, cependant, l'acceptation des modifications varie et certaines ne l'aiment absolument pas.
perl -csd -ne 'imprimer si m {\ qyour texte ici \ e}' fichier.txt p>
Allez certainement avec Cygwin (en utilisant X Server) - Les derniers supports UTF8. À mon dernier gig, je faisais beaucoup de travail avec des personnages CJK. En utilisant le serveur X de Cygwin, vous pouvez rechercher sur n'importe quel caractère et afficher tous les caractères que vous avez une police de largeur fixe pour. Découvrez également OD et XXD, ce qui facilite la saisie de vos recherches en utilisant des caractères hexagonaux, par exemple: $ echo '?' | grep $ (echo '3f' | xxd -p -r) p>
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 tellement que je blâme la mentalité "Encode tous les personnages en tant que unités de 16 bits" qui nous a donné UCS-16. Gee, une nouvelle ride architecturale qui n'est ni adéquate pour ce que cela tente d'accomplir ni i> compatible avec tout code existant du tout! Merci 1991!
Je n'ai pas utilisé Windows depuis des années, mais je connais deux alternatives à Grep qui sont écrites en langue interprétée et doivent donc exécuter n'importe quelle plate-forme: p>
Il suffit de courir sur Grepwin qui fonctionne parfaitement pour ce que je veux ici. J'aimerais que je l'aurais trouvé plus tôt! P>
Si vous avez NotePad ++, vous pouvez utiliser l'option "Rechercher dans les fichiers ..." pour rechercher des fichiers Unicode. p>
Très utile - je Toujours i> NotePad ++ ...
J'utilise grep.exe de http://unxutils.sourceforge.net/ avec "CHCP 65001" commander conjointement dans la ligne de commande Windows. p>
Vous pouvez utiliser dngrep . C'est un autre outil open source Grep qui prend en charge le type de fichier Unicode. P>
Je crois que le programme gratuit le plus convaincant dont vous avez besoin dans Windows est PowerShell. Par exemple: p>
Get-Childitem -Recurse -Path C: \ Temp \ *. C | Select-String -Pattern "MyUnicodeString" P>
ou si vous souhaitez simplement rechercher dans un répertoire (pas dans le sous-répertoire): p>
Select-String -Path "C: \ myDir \ *. Journal" -Pattern "erreur" p>
Utilisez Rechercher, pas FindStr.