中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » sed如何能使用dos的环境变量?
作者:
标题: sed如何能使用dos的环境变量? 上一主题 | 下一主题
axolo
新手上路





积分 18
发帖 7
注册 2007-10-30
状态 离线
『楼 主』:  sed如何能使用dos的环境变量?

1、程序:sed for dos
2、需要替换的文件tool.ini,template.ini
3、需要替换字符串_SETPATH为当前路径%CD%
4、错误的命令行: sed -i 's/_SETPATH/%CD%/g' tool.ini
5、原因:含有%号
6、应该可以用:sed -i 's/_SETPATH/$CD/g' tool.ini

请问如何才能在DOS下实现 $CD 等于 %CD% 所指定的当前路径?
能实现不同路径多文件同时替换么?

请赐教,谢谢。


sed -i "s/_SETPATH/%CD%/g" tool.ini

结果能替换可是DOS路径的\被删除了
得到的结果是c:windowssystem32
不是我想要的c:\windows\system32

请问如何解决》???

[ Last edited by axolo on 2007-10-30 at 08:36 PM ]

2007-10-30 16:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

RE axolo:

我猜想你的环境是DOS环境或者NT系列系统下的命令提示符,那么对于“sed -i 's/_SETPATH/%CD%/g' tool.ini”这一句是无法执行的,提示“Unknown command: `''”,也就是单引号(')出错了,因为在DOS或者命令提示符环境中,系统默认的字符引号对是双引号(""),而单引号却只识别成普通的字符,这和Linux下面的shell是不同的。

所以只能用双引号来将sed命令括起来。但是DOS的路径分隔符是反斜杠(\),而反斜杠是sed的转义字符,如果要保留这个转义字符,那么只能将原来的替换字串中的\转换成\\,这样就转义掉一个,还剩下一个。

另外,sed 应该可以使用通配符的,用*.ini可以表示当前目录中所有的ini文件,所以最后可以这样写:
@echo off
rem 将cd中的\转换成\\:
set cd=%cd:\=\\%
sed -i "s/_SETPATH/%cd%/g" *.ini


2007-10-31 04:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
axolo
新手上路





积分 18
发帖 7
注册 2007-10-30
状态 离线
『第 3 楼』:  

非常感谢
谢谢

俺是从DOS3.1一路走来的老古董了
现在倒快忘了DOS和C了

想不到这里还有DOS高手云集的地方
好好学习
谢谢

2007-10-31 08:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
axolo
新手上路





积分 18
发帖 7
注册 2007-10-30
状态 离线
『第 4 楼』:  

问题又来了,sed替换之后
居然把DOS格式的文本转成了UNIX格式的
回车换行\n全给解释成回车\r了

想保留回车\n原样不被换成\r怎么办??
怎么办?

2007-10-31 13:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 5 楼』:  

sed "s/$//"

2007-10-31 13:20
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
axolo
新手上路





积分 18
发帖 7
注册 2007-10-30
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by abcd at 2007-10-31 01:20 PM:
sed "s/$//"

小弟新来,不太明白。
能不能给个完整的写法???

谢谢

2007-10-31 15:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by axolo at 2007-10-31 03:12 PM:


小弟新来,不太明白。
能不能给个完整的写法???

谢谢

我的意思是替换unix的新行符为DOS格式

2007-10-31 15:18
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
axolo
新手上路





积分 18
发帖 7
注册 2007-10-30
状态 离线
『第 8 楼』:  

也就是我有个文本文件,见容如下:
\0x0D\0x0A
\0x0D\0x0A[Templates]
\0x0D\0x0ACount=1
\0x0D\0x0A[Templates\0]
\0x0D\0x0ADescription=新建PHP脚本
\0x0D\0x0AFile=D:\app\EditPlus\php\template.php
set cd=%cd:\=\\%
sed "s/D:\\app\\EditPlus/%CD%/g" *.ini
\0x0A
\0x0A[Templates]
\0x0ACount=1
\0x0A[Templates\0]
\0x0ADescription=新建PHP脚本
\0x0AFileE:\EditPlus\php\template.php
\0x0D\0x0A   为DOS的回车换行
\0x0A   为UNIX的换行

D:\app\EditPlus正确替换成了E:\EditPlus,但DOS回车换行也被改成了UNIX的换行。
我需要保留\0x0D\0x0A

[ Last edited by axolo on 2007-10-31 at 04:35 PM ]

2007-10-31 16:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 9 楼』:  

我这替换是不会丢失\0x0D的

2007-10-31 16:45
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
zhflwx
新手上路





积分 11
发帖 5
注册 2008-1-16
状态 离线
『第 10 楼』:  

又学习了一下呢,呵呵。

2008-1-17 22:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: