楼 主
[求助已结] sed替换带“\”的路径出错
发表于 2007-10-22 11:09 · 中国 浙江 温州 乐清市 电信
初级用户
★★
积分 109 发帖 52 注册 2006-01-03 22:47 20年会员 UID 48392
状态 离线
请大家帮忙。
用的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 楼
发表于 2007-10-22 11:32 · 中国 浙江 杭州 电信
高级用户
★★
积分 537 发帖 219 注册 2007-08-04 09:43 19年会员 UID 94620 性别 男 来自 杭州--半山
状态 离线
sed "s/D:\\Game\\Quake1\\//g" %temp%\a.temp
第 3 楼
发表于 2007-10-22 11:51 · 中国 浙江 温州 乐清市 电信
初级用户
★★
积分 109 发帖 52 注册 2006-01-03 22:47 20年会员 UID 48392
状态 离线
谢谢楼上的,不过这样子没有通用性,因为 %temp%\a.temp 是批处理生成的,如果当前目录不是 D:\Game\Quake1\ 的话,%temp%\a.temp 里面每行开头的路径就也随之变掉了。
第 4 楼
发表于 2007-10-22 12:14 · 中国 浙江 温州 乐清市 电信
初级用户
★★
积分 109 发帖 52 注册 2006-01-03 22:47 20年会员 UID 48392
状态 离线
奇怪,为什么都已经把默认的分隔符换成#了,还是需要用"\"把路径中的\给转义掉呢?
第 5 楼
发表于 2007-10-22 15:53 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 20年会员 UID 59080
状态 离线
因为\本来就是sed转义字符,需要另加一个\来转义它本身。
把默认分隔符换成#一般不需要在/前再加\,而在\前仍应该加\来转义\。
第 6 楼
发表于 2007-10-22 17:07 · 中国 浙江 温州 乐清市 电信
初级用户
★★
积分 109 发帖 52 注册 2006-01-03 22:47 20年会员 UID 48392
状态 离线
啊……这么说的话,我想实现的这个功能用sed还比较麻烦……郁闷。
第 7 楼
发表于 2007-10-22 17:40 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 20年会员 UID 59080
状态 离线
第 8 楼
发表于 2007-10-22 19:32 · 中国 浙江 温州 乐清市 电信
初级用户
★★
积分 109 发帖 52 注册 2006-01-03 22:47 20年会员 UID 48392
状态 离线
嗯,可惜,看来是一定要多生成一个临时文件了。;)
明天再看看吧。谢谢大家。
第 9 楼
发表于 2007-10-22 19:36 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 20年会员 UID 59080
状态 离线
第 10 楼
发表于 2007-10-23 08:30 · 中国 浙江 温州 乐清市 电信
初级用户
★★
积分 109 发帖 52 注册 2006-01-03 22:47 20年会员 UID 48392
状态 离线
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学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正