Filtre solo números (0-9) en la salida en el CMD clásico de Windows

Filtre solo números (0-9) en la salida en el CMD clásico de Windows

Tengo un texto, por ejemplo:

cd123aaq54

y me gustaría separar solo los números en otro archivo, para poder tener

12354

en la salida.

He estado probando muchos comandos como:

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

En Linux es mucho más fácil, sólo:

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

¿Cómo puedo hacer esto en un cmdshell de Windows?

Respuesta1

¿Cómo puedo eliminar los caracteres alfa de un archivo de entrada y dejar solo números?

A continuación se presentan dos soluciones:

  • Potencia Shell
  • archivo por lotes de Windows

solución PowerShell

Utilice el siguiente comando:

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

Notas:

  • input.txtcontiene el texto a filtrar.

  • output.txtcontiene el texto filtrado

  • Se eliminarán todos los caracteres no numéricos (no solo los caracteres alfabéticos).

Ejemplo:

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>

Solución de archivos por lotes de Windows

Utilice el siguiente archivo por lotes (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

Notas:

  • Lo anterior supone que no hay caracteres especiales ( !@#$%^&*()...) en el archivo de entrada (no se eliminarán).

  • El 'truco' consiste en utilizar la cadena de caracteres alfa como delimitadores para el segundo forcomando.

Uso:

RemoveAlpha input output
  • input: Nombre de ruta del archivo de entrada que contiene el texto que se va a filtrar.

  • output: Nombre de ruta para que el archivo de salida contenga el texto del filtro copiado.

Ejemplo:

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

F:\test>type input.txt
cd123aaq54
zyx456abc321

F:\test>type output.txt
12354
456321

Otras lecturas

información relacionada