클래식 Windows CMD의 출력에서 ​​숫자(0-9)만 필터링합니다.

클래식 Windows CMD의 출력에서 ​​숫자(0-9)만 필터링합니다.

문자 메시지가 있습니다. 예를 들면 다음과 같습니다.

cd123aaq54

다른 파일에서는 숫자만 분리하고 싶습니다.

12354

출력에서.

나는 다음과 같은 많은 명령을 시도했습니다.

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

Linux에서는 다음과 같이 훨씬 쉽습니다.

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

Windows cmd셸에서 이 작업을 어떻게 수행할 수 있나요?

답변1

숫자만 남기고 입력 파일에서 알파 문자를 제거하려면 어떻게 해야 합니까?

다음은 두 가지 해결 방법입니다.

  • 파워셸
  • 윈도우 배치 파일

파워셸 솔루션

다음 명령을 사용하십시오.

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

노트:

  • input.txt필터링할 텍스트가 포함되어 있습니다.

  • output.txt필터링된 텍스트가 포함되어 있습니다.

  • 숫자가 아닌 모든 문자(영문자뿐만 아니라)가 제거됩니다.

예:

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>

Windows 배치 파일 솔루션

다음 배치 파일(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

노트:

  • 위의 내용은 입력 파일에 특수 문자( ...)가 없다고 가정합니다 !@#$%^&*()(제거되지 않음).

  • '트릭'은 알파 문자 문자열을 두 번째 for명령의 구분 기호로 사용하는 것입니다.

용법:

RemoveAlpha input output
  • input: 필터링할 텍스트가 포함된 입력 파일의 경로 이름입니다.

  • output: 복사된 필터 텍스트를 포함할 출력 파일의 경로 이름입니다.

예:

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

F:\test>type input.txt
cd123aaq54
zyx456abc321

F:\test>type output.txt
12354
456321

추가 자료

관련 정보