楼 主
sed如何能使用dos的环境变量?
发表于 2007-10-30 16:35 · 中国 浙江 杭州 电信
新手上路
★
积分 18 发帖 7 注册 2007-10-30 16:03 UID 101194 性别 男
状态 离线
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 ]
第 2 楼
发表于 2007-10-31 04:29 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386 发帖 4,938 注册 2006-07-23 17:10 UID 59080
状态 离线
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
第 3 楼
发表于 2007-10-31 08:21 · 中国 浙江 杭州 电信
新手上路
★
积分 18 发帖 7 注册 2007-10-30 16:03 UID 101194 性别 男
状态 离线
非常感谢
谢谢
俺是从DOS3.1一路走来的老古董了
现在倒快忘了DOS和C了
想不到这里还有DOS高手云集的地方
好好学习
谢谢
第 4 楼
发表于 2007-10-31 13:17 · 中国 浙江 杭州 电信
新手上路
★
积分 18 发帖 7 注册 2007-10-30 16:03 UID 101194 性别 男
状态 离线
问题又来了,sed替换之后
居然把DOS格式的文本转成了UNIX格式的
回车换行\n全给解释成回车\r了
想保留回车\n原样不被换成\r怎么办??
怎么办?
第 5 楼
发表于 2007-10-31 13:20 · 中国 浙江 衢州 中移铁通
银牌会员
★★★
积分 1,436 发帖 739 注册 2007-10-11 17:44 UID 99469 性别 男
状态 离线
第 6 楼
发表于 2007-10-31 15:12 · 中国 浙江 杭州 电信
新手上路
★
积分 18 发帖 7 注册 2007-10-30 16:03 UID 101194 性别 男
状态 离线
Originally posted by abcd at 2007-10-31 01:20 PM:
sed "s/$//"
小弟新来,不太明白。
能不能给个完整的写法???
谢谢
第 7 楼
发表于 2007-10-31 15:18 · 中国 浙江 衢州 中移铁通
银牌会员
★★★
积分 1,436 发帖 739 注册 2007-10-11 17:44 UID 99469 性别 男
状态 离线
Originally posted by axolo at 2007-10-31 03:12 PM:
小弟新来,不太明白。
能不能给个完整的写法???
谢谢
我的意思是替换unix的新行符为DOS格式
第 8 楼
发表于 2007-10-31 16:32 · 中国 浙江 杭州 电信
新手上路
★
积分 18 发帖 7 注册 2007-10-30 16:03 UID 101194 性别 男
状态 离线
也就是我有个文本文件,见容如下:
\0x0D\0x0A
\0x0D\0x0A
\0x0D\0x0ACount=1
\0x0D\0x0A
\0x0D\0x0ADescription=新建PHP脚本
\0x0D\0x0AFile=D:\app\EditPlus\php\template.php
set cd=%cd:\=\\%
sed "s/D:\\app\\EditPlus/%CD%/g" *.ini
\0x0A
\0x0A
\0x0ACount=1
\0x0A
\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 ]
第 9 楼
发表于 2007-10-31 16:45 · 中国 浙江 衢州 中移铁通
银牌会员
★★★
积分 1,436 发帖 739 注册 2007-10-11 17:44 UID 99469 性别 男
状态 离线
第 10 楼
发表于 2008-01-17 22:40 · 中国 江苏 苏州 电信
新手上路
★
积分 11 发帖 5 注册 2008-01-16 00:07 UID 108724 性别 女
状态 离线
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正