%EB%A7%8C%20%ED%95%84%ED%84%B0%EB%A7%81%ED%95%A9%EB%8B%88%EB%8B%A4..png)
문자 메시지가 있습니다. 예를 들면 다음과 같습니다.
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
추가 자료
- Windows CMD 명령줄의 AZ 인덱스- Windows cmd 라인과 관련된 모든 것에 대한 훌륭한 참고 자료입니다.
- /f에 대해- 다른 명령의 결과에 대해 명령을 반복합니다.
- 유형- 하나 이상의 텍스트 파일의 내용을 표시합니다.