Filtre apenas números (0-9) na saída no Windows CMD clássico

Filtre apenas números (0-9) na saída no Windows CMD clássico

Tenho um texto, por exemplo:

cd123aaq54

e gostaria de separar apenas os números em outro arquivo, para poder ter

12354

na saída.

Tenho tentado vários comandos como:

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

No Linux é muito mais fácil, basta:

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

Como posso fazer isso em um cmdshell do Windows?

Responder1

Como posso retirar caracteres alfa de um arquivo de entrada, deixando apenas números?

Abaixo estão duas soluções:

  • PowerShell
  • Arquivo em lote do Windows

Solução PowerShell

Use o seguinte comando:

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

Notas:

  • input.txtcontém o texto a ser filtrado.

  • output.txtcontém o texto filtrado

  • Todos os caracteres não numéricos (não apenas caracteres alfabéticos) serão removidos.

Exemplo:

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>

Solução de arquivo em lote do Windows

Use o seguinte arquivo em lote (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:

  • O texto acima pressupõe que não há caracteres especiais ( !@#$%^&*()…) no arquivo de entrada (eles não serão removidos).

  • O 'truque' é usar a sequência de caracteres alfa como delimitadores para o segundo forcomando.

Uso:

RemoveAlpha input output
  • input: nome do caminho do arquivo de entrada que contém o texto a ser filtrado.

  • output: nome do caminho do arquivo de saída que conterá o texto do filtro copiado.

Exemplo:

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

F:\test>type input.txt
cd123aaq54
zyx456abc321

F:\test>type output.txt
12354
456321

Leitura adicional

informação relacionada