标题: [求助已结] sed替换带“\”的路径出错
[打印本页]
作者: dooomer
时间: 2007-10-22 11:09
标题: [求助已结] 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 ]
作者: junchen2
时间: 2007-10-22 11:32
sed "s/D:\\Game\\Quake1\\//g" %temp%\a.temp
作者: dooomer
时间: 2007-10-22 11:51
谢谢楼上的,不过这样子没有通用性,因为 %temp%\a.temp 是批处理生成的,如果当前目录不是 D:\Game\Quake1\ 的话,%temp%\a.temp 里面每行开头的路径就也随之变掉了。
作者: dooomer
时间: 2007-10-22 12:14
奇怪,为什么都已经把默认的分隔符换成#了,还是需要用"\"把路径中的\给转义掉呢?
作者: lxmxn
时间: 2007-10-22 15:53
因为\本来就是sed转义字符,需要另加一个\来转义它本身。
把默认分隔符换成#一般不需要在/前再加\,而在\前仍应该加\来转义\。
作者: dooomer
时间: 2007-10-22 17:07
啊……这么说的话,我想实现的这个功能用sed还比较麻烦……郁闷。
作者: lxmxn
时间: 2007-10-22 17:40
你先替换\为\\不就可以啦?
作者: dooomer
时间: 2007-10-22 19:32
嗯,可惜,看来是一定要多生成一个临时文件了。;)
明天再看看吧。谢谢大家。
作者: lxmxn
时间: 2007-10-22 19:36
为什么要生成临时文件?
作者: dooomer
时间: 2007-10-23 08:30
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
===============