![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-06 18:53 |
共 48,039 主题排行 / 350,124 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何用批实现TXT文本的某两行互换? |
| 可打印版本 4,780 / 24 |
| 第1楼 lotus516 | 发表于 2006-11-06 03:07 |
| 高级用户 发帖 246 积分 551 | |
|
如何用批实现TXT文本的某两行互换? 我有一个文本,里面内容如下:
张三 李四 王二麻子 小白 小黑 小强 ...... rem:中间为N行 小二 赵大 DOS WIN98 WINXP 现在我想实现把WINXP和张三互换成如下文本:(即文本第一行和最后一行互换) WINXP 李四 王二麻子 小白 小黑 小强 ...... rem:中间为N行 小二 赵大 DOS WIN98 张三 |
|
| 第2楼 redtek | 发表于 2006-11-06 05:48 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
只按楼主给出的原始模型处理,
以下代码只考虑到楼主上面非真实模型上的要求, 不考虑楼主没有给出的特殊情况或特殊符号等问题~:) 使用说明: 如果未加参数则提示使用说明信息。 原理: 大老婆和二老婆想互相交换她们手中的礼物, 于是大老婆先把礼物暂存在我这里,手腾空了后把二老婆的礼物拿了过去。 二老婆的礼物交给了大老婆以后,手腾空了。这时我再把大老婆暂存在我手中的礼物交给二老婆。 于是她们双方都互换了礼物~:) [备注:] 指定生成的新文件如果是已存在的文件,它将自动无提示删除。 [ Last edited by redtek on 2006-11-6 at 05:50 AM ] |
|
| 第3楼 namejm | 发表于 2006-11-06 05:55 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
假设你要处理的test.txt文本中没有CMD下的敏感字符(如<、>、|等),首行不为空,并且没有内容重复的行,那么,用下面的代码基本能满足你的需求:
[ Last edited by namejm on 2006-11-6 at 02:03 PM ] |
|
| 第4楼 redtek | 发表于 2006-11-06 05:56 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
本来应该为方便楼主应用,
例如:想让第3行与倒数第3行交换,则 Swap.BAT swap.dat 3 -3 a.txt 或 Swap.BAT swap.dat 3 a.txt 如果能这样会更方便楼主,实在是力不从心,谅~~ |
|
| 第5楼 namejm | 发表于 2006-11-06 07:06 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
在3F的基础上得到如下代码,可以处理内容有重复的行。原理和3F近似,只是过滤的不再是行内容,而是过滤行号:
|
|
| 第6楼 vkill | 发表于 2006-11-06 07:31 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
sed -n "$p" >temp.txt
sed "1{d;p}" test.txt |sed "${d;p}" >>temp.txt sed -n "1p" >>temp.txt 未测试,原理上可行 |
|
| 第7楼 lotus516 | 发表于 2006-11-06 11:59 |
| 高级用户 发帖 246 积分 551 | |
|
谢谢,不过namejm,3楼的命令不成功!!!
|
|
| 第8楼 namejm | 发表于 2006-11-06 12:33 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
3F的代码有诸多限制,如果我说漏了某些情况,能否把你的txt内容贴一部分出来?
|
|
| 第9楼 lotus516 | 发表于 2006-11-07 01:48 |
| 高级用户 发帖 246 积分 551 | |
|
好,详细见附件
附件 1.txt (2.39 KiB) |
|
| 第10楼 namejm | 发表于 2006-11-07 01:59 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
不好意思,发帖子的时候,copy了修改前的代码,而没有帖出修正后的内容,导致3F的代码漏掉了写入首行和尾行的语句,现已修正,请再次测试。
|
|
| 第11楼 vkill | 发表于 2006-11-07 09:07 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
test.bat
@echo off ::%1为life,调换%2和%3 ::比如说在test.txt中调换1行和9行,使用方法test.bat test.txt,1,9 ::暂时不能换3,-3之类的,不过可以sed -n "$=" %1 来看总共有多少行~再set/a计算实际的+行数 if *%1==* (echo 未指定文件&pause>nul&goto :eof) if *%2==* (set s=1) else (set s=%2) if *%3==* (set e=$) else (set e=%3) if not "%e%"=="$" if %e% lss %s% (set "s=%3"&set "e=%2") for /f "tokens=*" %%? in ('sed -n "%e%p" %1') do ( sed -e "%s%h" -e "%e%x" %1|sed "%s% c\%%?" |more>temp.txt ) pause exit 测试test.txt `-=\;',./~!@#o^&*()_+{}|:"<>? ab AB 12 34 一二三四五六七八九○ !·¥……—()——:“?》《 http ://abc.abc.abc/ [ Last edited by vkill on 2006-11-7 at 09:55 AM ] |
|
| 第12楼 namejm | 发表于 2006-11-07 09:23 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
网吧里的系统一般都是被阉割过的,有安全问题的命令可能都被废了。
|
|
| 第13楼 vkill | 发表于 2006-11-07 09:31 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
Originally posted by namejm at 2006-11-7 09:23: namejm兄测试下,原理是先把9替换为1,再把1复制为原文件9的内容~ 11 F代码更新 [ Last edited by vkill on 2006-11-7 at 09:58 AM ] |
|
| 第14楼 namejm | 发表于 2006-11-07 10:24 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
居然没有保存 sed 程序,我知道无奈何兄最近刚发过,但一时也搜索不到它的下载,汗~~,能给个下载的地址吗?
|
|
| 第15楼 无奈何 | 发表于 2006-11-07 11:09 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
我也补个 sed 的,文件不要过于巨大。
sed 下载:http://www.student.northpark.edu/pemente/sed/gsed407x.zip |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |