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

1

Eu tenho um texto, por exemplo:

cd123aaq54

e eu gostaria de separar apenas números em outro arquivo, então eu poderia ter

12354

na saída.

Eu tenho tentado muitos comandos como:

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

No linux é muito mais fácil, apenas:

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

Como posso fazer isso em um shell cmd do Windows?

    
por Carlos Alberto Lizana Hidalgo 14.04.2016 / 20:50

1 resposta

0

Como posso remover caracteres alfabéticos de um arquivo de entrada, deixando apenas números?

Abaixo estão duas soluções:

  • PowerShell
  • arquivo de lote do Windows

Solução do PowerShell

Use o seguinte comando:

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

Notas:

  • input.txt contém o texto a ser filtrado.

  • output.txt contém o texto filtrado

  • Todos os caracteres não numéricos (não apenas caracteres alfa) 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 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:

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

  • O 'truque' é usar a string de caracteres Alfa como delimetro para o segundo comando for .

Uso:

RemoveAlpha input output
  • input : nome do caminho para o arquivo de entrada contendo o texto a ser filtrado.

  • output : nome do caminho para o arquivo de saída 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

por 15.04.2016 / 14:35