
标题: [文本处理] 批处理如何实现根据文本中是否含有指定字符串对文本里的特定内容进行替换 [打印本页]
作者: yujiaphf 时间: 2016-10-10 18:00 标题: 批处理如何实现根据文本中是否含有指定字符串对文本里的特定内容进行替换
本帖最后由 pcl_test 于 2016-10-10 20:46 编辑
改个程序代码,数量很多,想用批处理完成,懂的进来看看
(/T0400B M0059 CIRCLE 20.00 0.00 0.00)
(/T3200X M0008 CIRCLE 6.40 0.00 0.00)
(/T3700X M0009 CIRCLE 7.20 0.00 0.00)
(/T4100X M0014 CIRCLE 12.00 0.00 0.00)
(/T4400X M0051 CIRCLE 4.20 0.00 0.00)
(/T4900X M0006 CIRCLE 4.80 0.00 0.00)
(/T5100X M0011 CIRCLE 9.00 0.00 0.00)
(/T5300X M0075 CIRCLE 3.20 0.00 0.00)
T04
X952.02Y150
GRD/L 36.62 1 U 16.6 1
X952.1Y16.84
GRD/L 37.23 3 U 31.55 3
-----------------------------------------
有CIRCLE 20.00的就把所有的T04改成T23,重要的是如果不知道CIRCLE 20.00是T04的情况下,有可能是T05,T06,如何把它改成T23
作者: codegay 时间: 2016-10-10 18:39
这是数控程序?
作者: pcl_test 时间: 2016-10-10 21:17
并未说明/T0400B要不要替换成/T2300B,那么如何知道你要替换的是什么,需替换的内容有什么特征与其他内容区分开来- rem 猜的。win7以上系统运行
- powershell -c "$a=gc '顶楼测试数据.txt';if($a -match 'CIRCLE\s+20.00'){$a -replace '\bT\d+\b','T23'}"
- pause
复制代码
作者: WHY 时间: 2016-10-10 21:32
也是猜的- @echo off & setlocal enabledelayedexpansion
-
- for /f "delims=" %%i in ('findstr /i /r /m /c:"\<CIRCLE[ ][ ]*20\.00\>" *.txt') do (
- (for /f "tokens=* usebackq" %%j in ("%%i") do (
- set "s=%%j"
- if /i "!s:~0,1!" == "T" (
- for /f "tokens=*delims=0123456789" %%k in ("!s:~1!") do (
- if "%%k" == "" (echo;T23) else echo;!s!
- )
- ) else echo;!s!
- ))>"%%i.Log"
- )
-
- pause
复制代码
作者: yujiaphf 时间: 2016-10-10 22:22
好的,谢谢,T04只是举个例子,可以看作一个变量,因为有很多程序,能否加个判断,如果有CIRCLE 20.00,就把前面的T什么什么改成T23,如果有CIRCLE 6.40就把前面的T什么什么改成T24,如果有CIRCLE 7.20,就把前面的T什么什么改成T25,
作者: DiamondbacK 时间: 2016-10-11 01:59
本帖最后由 DiamondbacK 于 2016-10-11 20:35 编辑
回复 5# yujiaphf - gawk "BEGIN { replacements[\"20\\.00\"] = \"T23\"; replacements[\"6\\.40\"] = \"T24\"; replacements[\"7\\.20\"] = \"T25\"; while (getline < ARGV[1]) for ( item in replacements ) if ( patterns[item] == nul && $0 ~ \"CIRCLE +\" item ) patterns[item] = substr($1, match($1, /T/), 3) } { for ( item in patterns ) gsub(patterns[item], replacements[item]); print }" "输入文件"
复制代码
- PowerShell -c "$replacements = @{'20\.00' = 'T23'; '6\.40' = 'T24'; '7\.20' = 'T25'}; $patterns = @{}; $text = (Get-Content \"输入文件\") -join \"`n\"; Foreach ($item in $replacements.keys) { if ($text -match '(T\d\d).+CIRCLE +' + $item) { $patterns[$item] = $matches[1] } }; Foreach ($item in $patterns.keys) { $text = $text -replace $patterns[$item], $replacements[$item] }; $text"
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |