%20na%20sa%C3%ADda%20no%20Windows%20CMD%20cl%C3%A1ssico.png)
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 cmd
shell 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.txt
contém o texto a ser filtrado.output.txt
contém o texto filtradoTodos 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
for
comando.
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
- Um índice AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
- para /f- Comando de loop em relação aos resultados de outro comando.
- tipo- Exiba o conteúdo de um ou mais arquivos de texto.