Filtrez uniquement les nombres (0 à 9) en sortie dans Windows CMD classique

1

J'ai un texte, par exemple:

cd123aaq54

et je voudrais séparer uniquement les numéros dans un autre fichier, afin que je puisse avoir

12354

dans la sortie.

J'ai essayé beaucoup de commandes comme:

Get-Content text.txt | Select-String  -Pattern '[0-9]'

Sous Linux c'est beaucoup plus facile, il suffit de:

grep -o '[0-9][0-9]*' text >numbers

Comment puis-je faire cela dans un cmdshell Windows ?

Carlos Alberto Lizana Hidalgo
la source
Il existe un certain nombre de versions Windows de grep, bien que toutes n’aient pas cette -ooption.
AFH le
Où puis-je télécharger une version de grep qui me permet de le faire? J'ai essayé certains d'entre eux.
Carlos Alberto Lizana Hidalgo
J'ai téléchargé win-bash . Je ne me bash.exese beaucoup, mais dans un fichier zip 5.6MB, ainsi que bash, il y a plus de 100 des utilitaires UNIX, y compris sed, wget, find, xargset bien sûr grep, et cette version prend en charge -o. Il n'y a pas d'installation: extrayez-vous dans un répertoire, ajoutez-le à votre PATHet exécutez-le selon vos besoins. Ou vous pouvez ajouter des utilitaires sélectionnés à un répertoire existant déjà dans votre chemin. Ce sont toutes des implémentations 32 bits, ce qui signifie qu'elles fonctionneront sur tous les systèmes Windows depuis 98. Malheureusement, il n'y en a pas man.
AFH
@CarlosAlbertoLizanaHidalgo Réponse ajoutée avec les solutions de fichiers de traitement par lots de PowerShell et Windows. Avez-vous besoin de plus d'aide? Si cette réponse vous a aidé et a répondu à votre question, n'oubliez pas d' accepter cette réponse
DavidPostill

Réponses:

0

Comment puis-je effacer les caractères alpha d'un fichier d'entrée en ne laissant que des nombres?

Voici deux solutions:

  • PowerShell
  • Fichier batch Windows

Solution PowerShell

Utilisez la commande suivante:

Get-Content input.txt | ForEach-Object {$_ -Replace "[^0-9]", ""} > output.txt

Remarques:

  • input.txt contient le texte à filtrer.

  • output.txt contient le texte filtré

  • Tous les caractères non numériques (pas seulement les caractères alpha) seront supprimés.

Exemple:

PS F:\test> type .\input.txt
cd123aaq54
zyx456abc321
PS F:\test> Get-Content input.txt | ForEach-Object {$_ -Replace "[^0-9]", ""} > output.txt
PS F:\test> type .\output.txt
12354
456321
PS F:\test>

Solution de fichiers batch Windows

Utilisez le fichier de commandes suivant (RemoveAlpha.cmd):

@echo off
setlocal enabledelayedexpansion
set _alpha=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
rem read input file line by line
for /f "usebackq tokens=*" %%i in (`type %1`) do (
  rem strip alpha characters by using them as delimeters
  for /f "tokens=1,2 delims=%_alpha%" %%j in ("%%i") do (
    rem write stripped text to output file
    echo %%j%%k>>%2
    )  
  )
endlocal

Remarques:

  • Ce qui précède suppose qu'il n'y a pas de caractères spéciaux ( !@#$%^&*()...) dans le fichier d'entrée (ils ne seront pas supprimés).

  • Le «truc» consiste à utiliser la chaîne de caractères alpha comme délimètres pour la deuxième forcommande.

Usage:

RemoveAlpha input output
  • input: Chemin d'accès au fichier d'entrée contenant le texte à filtrer.

  • output: Chemin du fichier de sortie contenant le texte du filtre copié.

Exemple:

F:\test>RemoveAlpha input.txt output.txt

F:\test>type input.txt
cd123aaq54
zyx456abc321

F:\test>type output.txt
12354
456321

Lectures complémentaires

DavidPostill
la source