中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-06 04:59
48,039 主题排行 / 350,124 发帖 / 今日 2 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助已结] sed替换带“\”的路径出错
可打印版本  928 / 9
第1楼 dooomer 发表于 2007-10-22 11:09
初级用户 发帖 52 积分 109
[求助已结] 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 ]
第2楼 junchen2 发表于 2007-10-22 11:32
高级用户 发帖 219 积分 537 来自 杭州--半山
sed "s/D:\\Game\\Quake1\\//g" %temp%\a.temp
第3楼 dooomer 发表于 2007-10-22 11:51
初级用户 发帖 52 积分 109
谢谢楼上的,不过这样子没有通用性,因为 %temp%\a.temp 是批处理生成的,如果当前目录不是 D:\Game\Quake1\ 的话,%temp%\a.temp 里面每行开头的路径就也随之变掉了。
第4楼 dooomer 发表于 2007-10-22 12:14
初级用户 发帖 52 积分 109
奇怪,为什么都已经把默认的分隔符换成#了,还是需要用"\"把路径中的\给转义掉呢?
第5楼 lxmxn 发表于 2007-10-22 15:53
版主 发帖 4,938 积分 11,386
因为\本来就是sed转义字符,需要另加一个\来转义它本身。

把默认分隔符换成#一般不需要在/前再加\,而在\前仍应该加\来转义\。
第6楼 dooomer 发表于 2007-10-22 17:07
初级用户 发帖 52 积分 109
啊……这么说的话,我想实现的这个功能用sed还比较麻烦……郁闷。
第7楼 lxmxn 发表于 2007-10-22 17:40
版主 发帖 4,938 积分 11,386
你先替换\为\\不就可以啦?
第8楼 dooomer 发表于 2007-10-22 19:32
初级用户 发帖 52 积分 109
嗯,可惜,看来是一定要多生成一个临时文件了。;)
明天再看看吧。谢谢大家。
第9楼 lxmxn 发表于 2007-10-22 19:36
版主 发帖 4,938 积分 11,386
为什么要生成临时文件?
第10楼 dooomer 发表于 2007-10-23 08:30
初级用户 发帖 52 积分 109
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
===============
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023