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
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- para / f - Comando Loop contra os resultados de outro comando.
- tipo - Exibe o conteúdo de um ou mais arquivos de texto.