中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助已结] sed替换带“\”的路径出错
作者:
标题: [求助已结] sed替换带“\”的路径出错 上一主题 | 下一主题
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『楼 主』:  [求助已结] sed替换带“\”的路径出错

请大家帮忙。

用的sed版本是ssed。

有一个文本文件(%temp%\a.temp),里面的内容是这样:
D:\Game\Quake1\Q3Map\
D:\Game\Quake1\Quoth\
D:\Game\Quake1\Quoth\Warp\
D:\Game\Quake1\ROGUE\
D:\Game\Quake1\SPMod\Bastion\
D:\Game\Quake1\SPMod\BBelief\
D:\Game\Quake1\SPMod\Chapters\
D:\Game\Quake1\SPMod\Contract\

现在想把前面“D:\Game\Quake1\”这一部分去掉。“D:\Game\Quake1\”是当前目录,所以,我用了

ssed "s#%cd%\##" %temp%\a.temp

可老是不能替换成功,提示"unterminated 's' command"
换过好几个不同版本的sed,结果都一样。请大侠帮忙看看。

[ Last edited by dooomer on 2007-10-23 at 08:31 AM ]

2007-10-22 11:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 2 楼』:  

sed "s/D:\\Game\\Quake1\\//g" %temp%\a.temp

2007-10-22 11:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 3 楼』:  

谢谢楼上的,不过这样子没有通用性,因为 %temp%\a.temp 是批处理生成的,如果当前目录不是 D:\Game\Quake1\ 的话,%temp%\a.temp 里面每行开头的路径就也随之变掉了。

2007-10-22 11:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 4 楼』:  

奇怪,为什么都已经把默认的分隔符换成#了,还是需要用"\"把路径中的\给转义掉呢?

2007-10-22 12:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 5 楼』:  

因为\本来就是sed转义字符,需要另加一个\来转义它本身。

把默认分隔符换成#一般不需要在/前再加\,而在\前仍应该加\来转义\。

2007-10-22 15:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 6 楼』:  

啊……这么说的话,我想实现的这个功能用sed还比较麻烦……郁闷。

2007-10-22 17:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 7 楼』:  

你先替换\为\\不就可以啦?

2007-10-22 17:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 8 楼』:  

嗯,可惜,看来是一定要多生成一个临时文件了。;)
明天再看看吧。谢谢大家。

2007-10-22 19:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 9 楼』:  

为什么要生成临时文件?

2007-10-22 19:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 10 楼』:  

OK, 基本搞定,代码如下:

===============
cd|ssed -e "s#\\#/#g">%temp%\a.tmp
For /f %%B in (%temp%\a.tmp) do set rootdir=%%B
===============
echo.>%temp%\a.tmp
For /f %%A in ('dir/s/b pak0.pak maps progs.dat *.pk3') do echo %%~dpA>>%temp%\a.tmp
===============
TYPE %temp%\a.tmp|uniq.exe|ssed "s#\\#/#g"|ssed "s#%rootdir%/##g">LDATA\LIST_MOD.TXT
===============

2007-10-23 08:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: