我有一段文字,例如:
cd123aaq54
而我只想在另一个文件中分隔数字,所以我可以
12354
在输出中。
我已经尝试了很多命令,例如:
Get-Content text.txt | Select-String -Pattern '[0-9]'
在 Linux 中这要简单得多,只需:
grep -o '[0-9][0-9]*' text >numbers
我如何在 Windows cmd
shell 中执行此操作?
答案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
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 对于/f- 循环命令以执行另一个命令的结果。
- 类型- 显示一个或多个文本文件的内容。