我有一组这样的数据
7859 10000:00 7859 10000:00(xfer#1,要检查=1033/1035)
32768 000:17 22174479 10000:00(xfer#2,待检查=1032/1035)
它们从文件中读取并逐行传递到我的批处理脚本中的方法
我想做的就是只提取
7859
22174479
从这一行来看,基本上是“\d+:\d\d\s+”之后的内容,然后接下来是我需要的数字,然后是另一个“\d\d.*”
仅使用批处理脚本正则表达式以及搜索和替换是否可以实现这一点?
我尝试阅读了很多文章但找不到解决方案
在 中,我想添加数字
谢谢
EDIT
请注意,批处理并不是用于正则表达式的最佳语言! Cmd 一次处理一行输入,而 regex 允许多行处理。
听起来您只需要从线路中执行令牌抓取即可。假设该行的更完整的正则表达式如下所示[\d+\s+\d+:\d\d\s+]+\(xfer#\d+, to-check=\d+/\d+\)
.
这让我们知道该行中有恒定的分隔符。:
冒号,和\s+
空白。从那里开始,只需使用这些锚点来确定令牌位置即可。
从该行中提取由单行空格分隔的第三个标记。
for /f "tokens=3" %%A in ("line") do echo %%A
从行中用冒号分隔的第二个标记中提取由单行空格分隔的第二个标记。
for /f "tokens=2 delims=:" %%A in ("line") do (
for /f "tokens=2" %%B in ("%%A") do echo %%B
)
Update
提取最后一个冒号之前的第二个标记。
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Line=32768 004:47 2686976 2200:03 11707819 10000:01 (xfer#5264, to-check=1020/6975)"
set "Last="
for /f "delims=" %%A in ('echo("%Line::="^&echo("%"') do (
for /f "tokens=2" %%B in ("%%A") do (
if defined This set "Last=!This!"
set "This=%%B"
)
)
echo %Last%
endlocal
pause >nul
局限性
- 包含奇数个双引号的行
"
会导致脚本崩溃。防止这种情况的一种方法是在 for 循环之前去掉引号set Line=%Line:"=%
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)