在经典 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 cmdshell 中执行此操作?

答案1

如何从输入文件中删除字母字符,只留下数字?

以下是两种解决方案:

  • 电源外壳
  • Windows 批处理文件

PowerShell 解决方案

使用以下命令:

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

笔记:

  • 以上假设输入文件中没有特殊字符(!@#$%^&*()...)(它们不会被删除)。

  • “技巧”是使用 Alpha 字符串作为第二条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

进一步阅读

相关内容