![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 00:22 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 菜鸟求助:如何替换文本文件的内容? |
| 可打印版本 3,003 / 15 |
| 第1楼 jtyuer | 发表于 2006-08-17 20:31 |
| 初级用户 发帖 29 积分 73 | |
|
菜鸟求助:如何替换文本文件的内容? 假定tmp.txt文件内容如下:(其中一部分)
miniime.tpl quick.ime winar30.ime arphr.tbl arptr.tbl array30.tab arrayhw.tab WINGB.IME WINPY.IME WINPY.MB WINSP.IME WINSP.MB 想把tmp.txt中每一行的最后一个字符转换成_,即内容转换成如下格式: miniime.tp_ quick.im_ winar30.im_ arphr.tb_ arptr.tb_ array30.ta_ arrayhw.ta_ WINGB.IM_ WINPY.IM_ WINPY.MB_ WINSP.IM_ WINSP.MB_ 每一行都如此处理,用sed该如何做? 或者还有什么其它更简便的方法? 请各位老大帮帮忙,先谢谢大家了! |
|
| 第2楼 3742668 | 发表于 2006-08-17 21:04 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
如果后缀只存在2个字母或3个字母的情况,下面的脚本基本可以满足你的要求:
|
|
| 第3楼 jtyuer | 发表于 2006-08-17 21:09 |
| 初级用户 发帖 29 积分 73 | |
|
高手就是高手,谢谢版主!
假如用sed怎么做呢? |
|
| 第4楼 namejm | 发表于 2006-08-17 22:28 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
下面这段代码更具有通用性,而不用考虑后缀名的字符个数、文件名是否含有空格等情况:
sorry,看走眼了:(。这段代码只是在每行的最后添加_,并不是用_替换每行最后的字符,5楼才是正解。 [ Last edited by namejm on 2006-8-18 at 12:47 ] |
|
| 第5楼 zh159 | 发表于 2006-08-18 02:57 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
楼上的,楼主的要求是“每一行的最后一个字符转换成_”
应该是 |
|
| 第6楼 namejm | 发表于 2006-08-18 07:39 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
一口气读完顶楼帖子,然后兴致勃勃地把代码就写出来了,还在纳闷3742668版主为什么这么简洁的代码不用,偏偏要弄个复杂的方案出来,还有这样那样的限制,没想到居然是粗心大意看走了眼,呵呵。5楼正解。
[ Last edited by namejm on 2006-8-18 at 07:44 ] |
|
| 第7楼 zd264 | 发表于 2006-08-18 17:03 |
| 新手上路 发帖 5 积分 18 | |
|
!Name:~0,-1!_
这是什么意思?5楼的,看不懂,请教! |
|
| 第8楼 namejm | 发表于 2006-08-18 17:19 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
启用了变量延迟之后,引用变量要把百分号对改成叹号对。!Name:~0,-1!_表示截取字符串的时候,抛弃最后一个字符,然后再加上_。
|
|
| 第9楼 3742668 | 发表于 2006-08-18 21:57 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
大家不要太浮躁了,请注意对比tmp.txt的最后3个字符串有什么异同。
|
|
| 第10楼 namejm | 发表于 2006-08-18 23:45 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
Re 3742668『第 10 楼』:
仔细对比了一下,狂吐血中。 楼主说"想把tmp.txt中每一行的最后一个字符转换成_",但是它最后一行的WINSP.MB为什么偏偏要转成WINSP.MB_而不是WINSP.M_呢?我认为楼主的说法有自相矛盾的地方。 |
|
| 第11楼 zh159 | 发表于 2006-08-19 02:30 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
我看还是楼主的tmp.txt错了
|
|
| 第12楼 jtyuer | 发表于 2006-08-19 11:14 |
| 初级用户 发帖 29 积分 73 | |
|
呵呵,是我表达错误了,我的本意就是其中的WINSP.MB也要处理成WINSP.MB_
|
|
| 第13楼 namejm | 发表于 2006-08-19 11:35 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
Re jtyuer 『第 12 楼』:
如果是你的表达错了,那么,你的本意准确的表达就是:文件的后缀名字符有2~3个不等。如果是2个,则在最后添加_;如果是3个,则把最后一个字符用_替换,总之,要保持新的后缀名为3个字符。如此一来,3742668第二楼的才是正解。 |
|
| 第14楼 maya0su | 发表于 2006-08-27 20:38 |
| 中级用户 发帖 131 积分 241 | |
|
能用一个空格替代一行字符吗?
就是说,可以在批处理中,删除那行字符! |
|
| 第15楼 namejm | 发表于 2006-08-27 20:55 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
可以用findstr /v来删除指定行的字符,但是如果要用空格来代替,估计会比较困难。
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |