%20en%20la%20salida%20en%20el%20CMD%20cl%C3%A1sico%20de%20Windows.png)
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 cmd
shell 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.txt
contiene el texto a filtrar.output.txt
contiene el texto filtradoSe 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
for
comando.
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
- Un índice AZ de la línea de comando CMD de Windows- Una excelente referencia para todo lo relacionado con la línea cmd de Windows.
- para /f- Comando de bucle contra los resultados de otro comando.
- tipo- Mostrar el contenido de uno o más archivos de texto.