标题: [文本处理] 批处理怎样使用正则表达式替换日期? [打印本页]
作者: FIR1987 时间: 2011-4-28 14:04 标题: 批处理怎样使用正则表达式替换日期?
本帖最后由 FIR1987 于 2011-5-3 22:14 编辑
此题背景如下
有日志文件格式如下
F:\soft\log\分析表.log:星期四 14 十月 2010 Timing, TOTAL TIME (CREATE CUBE),10:17:45
F:\soft\log\分析表.log:星期五 15 十月 2010 Timing, TOTAL TIME (CREATE CUBE),10:17:45
F:\soft\log\分析表.log:星期六 16 十月 2010 Timing, TOTAL TIME (CREATE CUBE),10:17:45
现在我希望将14 十月 2010 处理为2010-10-14
14 十月 2010 多个日期 不是就这一个 呵呵
这个是一个叫cognos工具生cube产生的日志
作者: FIR1987 时间: 2011-4-28 14:08
这个日期是变的啊 不是都是当天的 呵呵
作者: CrLf 时间: 2011-4-28 14:25
- @echo off&setlocal enabledelayedexpansion
- set str=14 十月 2010
- for %%a in ( 十二 十一 十 九 八 七 六 五 四 三 二 一) do (
- set /a "n-=1-^!n*13"
- for %%z in ("%%a月=!n!") do set str=!str:%%~z!
- )
- for /f "tokens=1-3" %%a in ("%str%") do echo %%c-%%b-%%a
- pause
复制代码
作者: CrLf 时间: 2011-4-28 14:26
非要用正则得用sed或者别的外部命令
作者: FIR1987 时间: 2011-4-28 14:30
谢谢 憨豆
我只是举个例子 14 十月 2010 所以这个不是静态的
所以貌似上面的行不通吧
作者: CrLf 时间: 2011-4-28 14:36
第一行str变量随便改,格式不变都不会错
作者: hanyeguxing 时间: 2011-4-28 14:39
本帖最后由 hanyeguxing 于 2011-4-28 14:43 编辑
你这里所说的动态是什么意思?是当前日期?还是文本中有很多这样的日期但日期不同?那么每行最多有多少个这样的日期?
作者: batman 时间: 2011-4-28 14:46
本帖最后由 batman 于 2011-4-28 15:43 编辑
- @echo off&setlocal enabledelayedexpansion
- set /a n=100
- for %%a in (一 二 三 四 五 六 七 八 九 十 十一 十二) do set /a n+=1&set "%%a月=!n:~1!"
- for /f "tokens=1-3" %%a in (%date%) do echo %%c-!%%b!-%%a
- pause>nul
复制代码
作者: CrLf 时间: 2011-4-28 14:53
本帖最后由 zm900612 于 2011-4-28 14:55 编辑
看错,此处当我没说...
不过这种格式的系统日期还是第一次见
作者: hanyeguxing 时间: 2011-4-28 14:57
8# batman
我还以为是要处理文本里的内容呢,是我问题想复杂了。。。
作者: FIR1987 时间: 2011-4-28 15:36
本帖最后由 FIR1987 于 2011-5-3 22:12 编辑
我错了 。。。。
是文本里的内容
F:\soft\log\分析表.log:星期四 14 十月 2010 Timing, TOTAL TIME (CREATE CUBE),10:17:45
F:\soft\log\分析表.log:星期五 15 十月 2010 Timing, TOTAL TIME (CREATE CUBE),10:17:45
F:\soft\log\分析表.log:星期六 16 十月 2010 Timing, TOTAL TIME (CREATE CUBE),10:17:45
现在我希望将14 十月 2010 处理为2010-10-14 14 十月 2010 多个日期 不是就这一个 呵呵
我前面的问题都是和这个log相关的 呵呵 这个是一个叫cognos工具生cube产生的日志
作者: batman 时间: 2011-4-28 15:43
- @echo off&setlocal enabledelayedexpansion
- cd /d F:\soft\log&set /a n=100
- for %%a in (一 二 三 四 五 六 七 八 九 十 十一 十二) do set /a n+=1&set "%%a月=!n:~1!"
- (for /f "tokens=1-4*" %%a in (分析表.log) do echo %%a %%d-!%%c!-%%b %%e)>$
- move $ 分析表.log
- start 分析表.log
- pause>nul
复制代码
作者: FIR1987 时间: 2011-4-29 00:03
很简洁 大致明白了 非常感谢 复制代码
我知道是替换 ~1是个怎么用法
那个$就是个临时文件 用什么字母代替都成吧 、
谢谢
作者: Batcher 时间: 2011-4-29 00:58
13# FIR1987
批处理set命令截取字符详解
http://bbs.bathome.net/thread-996-1-1.html
批处理set命令变量字符截取点点通
http://bbs.bathome.net/thread-40-1-1.html
批处理新手set命令截取字符练习工具
http://bbs.bathome.net/thread-1149-1-1.html
作者: FIR1987 时间: 2011-4-29 15:59
大致明白了
先遍历中文汉字 此时n=100 每遍历一个 100+1 -》101、102、103 。。112
~1就是取1后面的数字也就是01、02。。。12 分别替换一月、二月
但是我想问下
@echo off
set /a n=100
for %%a in (一 二 三 四 五 六 七 八 九 十 十一 十二) do set /a n+=1&echo %n%
pause
为何我每次显示都是100呢
还有$符号 我看版主经常用 这个能解释下吗 多谢
作者: FIR1987 时间: 2011-4-29 16:01
大致明白了
先遍历中文汉字 此时n=100 每遍历一个 100+1 -》101、102、103 。。112
~1就是取1后面的数字也就是01、02。。。12 分别替换一月、二月
但是我想问下
@echo off
set /a n=100
for %%a in (一 二 三 四 五 六 七 八 九 十 十一 十二) do set /a n+=1&echo %n%
pause
为何我每次显示都是100呢
还有$符号 我看版主经常用 这个能解释下吗 多谢
作者: FIR1987 时间: 2011-5-2 15:45
自己解释下
都是100 是因为没用延迟变量
$ 符号应该可以是任意字符 $ 只是斑竹习惯(对吧) 呵呵
作者: Batcher 时间: 2011-5-2 16:38
17# FIR1987
一个临时文件的名字而已,但必须是windows允许的文件名字符,不能是任意字符。
作者: Batcher 时间: 2011-5-2 20:34
11# FIR1987
请把问题背景描述更新到顶楼,以便后来人查看。
作者: FIR1987 时间: 2011-5-3 10:21
11# FIR1987
请把问题背景描述更新到顶楼,以便后来人查看。
Batcher 发表于 2011-5-2 20:34
问题背景描述?什么意思 怎么更新到楼上 。。呵呵
作者: Batcher 时间: 2011-5-3 11:49
20# FIR1987
知道怎样编辑顶楼的帖子吗?知道怎样把11楼的内容复制、粘贴到顶楼吗?
作者: yjstone 时间: 2011-5-4 00:43
@echo off&setlocal enabledelayedexpansion
cd /d F:\soft\log&set /a n=100
for %%a in (一 二 三 四 五 六 七 八 九 十 十一 十二) do set /a n+=1&set "%%a月=!n:~1!"
(for /f "tokens=1-4*" %%a in (分析表.log) do echo %%a %%d-!%%c!-%%b %%e)>$
move $ 分析表.log
start 分析表.log
pause>nul
batman 发表于 2011-4-28 15:43
高,学习了,最精妙的是"%%a月=!n:~1!" 和 !%%c!,要是我只会用call 了。
作者: hfg1977 时间: 2011-5-4 18:35
- type 01.txt|sed -e "s/\([0-9]\+\) \(..月\) \([0-9]\{4\}\)/\3-\2-\1/" -e "s/十月/10/" -e "s/一月/01/" -e "s/二月/02/" -e "s/三月/03/" -e "s/四月/04/"
复制代码
作者: FIR1987 时间: 2011-5-10 17:25
23# hfg1977
谢谢 你的正则,要用sed还要装东西吧
作者: ▄︻┻═┳一 时间: 2011-5-10 21:43
gawk 。。。。
作者: Batcher 时间: 2011-5-11 01:28
24# FIR1987
sed只需要下载,不需要安装。
http://bbs.bathome.net/thread-3981-1-1.html
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |