中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 怎么样替换文本中的字符串 上一主题 | 下一主题
kidzgy
中级用户





积分 262
发帖 129
注册 2007-7-11
状态 离线
『楼 主』:  怎么样替换文本中的字符串

比如说,

FreqUpMode=*

(*代表任意数字,可替换的数字)

我要寻找FreqUpMode,不管*的数字是什么,我要替换它为3。

2007-8-4 18:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

UE可以……

2007-8-4 19:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kidzgy
中级用户





积分 262
发帖 129
注册 2007-7-11
状态 离线
『第 3 楼』:  

我要用BAT哦。批处理命令

2007-8-4 20:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 4 楼』:  

P中似乎只有用sed外部命令才能替换,

纯P的话,只能导到新文件里。

2007-8-4 21:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 5 楼』:  

这个代码可以实现楼主的要求,不过有两个缺陷
1 会去掉文件中的空行
2 只能判断关键字是否符合要求,而不能检查是否有等号
setlocal enabledelayedexpansion

set input=test.txt
set output=test1.txt

set /a c1=0
set /a c2=0
for /f "tokens=1,2* delims==" %%i in ('type %input%') do (
        set /a c1 = !c1!+1
        if "%%i"=="FreqUpMode" (
                echo FreqUpMode=23 >> %output%
        ) else (
                set /a c2=0
                for /f "delims=" %%a in ('type %input%') do (
                        set /a c2=!c2!+1
                        if "!c1!"=="!c2!" echo %%a >> %output%
                )
        )
)
pause
输入
FreqUpMode=12122121
asdfadf

FreqUpMode=
FreqUpMode
FreqUpModes=12122121
输出
FreqUpMode=23
asdfadf
FreqUpMode=23
FreqUpMode=23
FreqUpModes=12122121
[ Last edited by sonicandy on 2007-8-5 at 07:12 AM ]

2007-8-4 22:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kidzgy
中级用户





积分 262
发帖 129
注册 2007-7-11
状态 离线
『第 6 楼』:  

楼上的真比熊猫还讨人喜爱。谢谢。
你所说的两个缺点倒没有什么所谓,不影响ini的使用,可是我发现的缺点就是,速度比较慢了一点。

2007-8-5 07:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kidzgy
中级用户





积分 262
发帖 129
注册 2007-7-11
状态 离线
『第 7 楼』:  

仔细弄了弄发现,如果输入输出同一个文件的话,那只能把新修改的内容增加到原来的文件上。这样就出现两份内容,一份修改前的,一份是修改后的,这样就没有达到替换字符串的要求。

2007-8-5 08:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sonicandy
中级用户





积分 273
发帖 91
注册 2007-5-7
状态 离线
『第 8 楼』:  

不客气,这样应该就可以了.
setlocal enabledelayedexpansion

set input=test.txt
set output=test~tmp.txt

set /a c1=0
set /a c2=0
for /f "tokens=1,2* delims==" %%i in ('type %input%') do (
        set /a c1 = !c1!+1
        if "%%i"=="FreqUpMode" (
                echo FreqUpMode=23 >> %output%
        ) else (
                set /a c2=0
                for /f "delims=" %%a in ('type %input%') do (
                        set /a c2=!c2!+1
                        if "!c1!"=="!c2!" echo %%a >> %output%
                )
        )
)
del %input%
ren %output% %input%
pause


2007-8-5 10:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 9 楼』:  

早说是ini格式的文件……

FreqUpMode=48asdfadf
FreqUpMode=99;FreqUpMode=81
FreqUpModes=12122121test这种P是很难做到的

2007-8-5 10:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kidzgy
中级用户





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

回9楼

不瞒你,8楼已经做到了。

2007-8-5 15:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by kidzgy at 2007-8-5 15:23:
回9楼

不瞒你,8楼已经做到了。

早说是ini格式的文件……
FreqUpMode=23
FreqUpMode=23
FreqUpModes=12122121test这种P是很难做到的


这个是运行后的结果?做到了?

2007-8-14 12:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 12 楼』:  

我来个简单点的:
set input=test.txt
set output=tmp.txt
for /f "tokens=1,2* delims==" %%i in ('type %input%') do if "%%i"=="FreqUpMode" (echo FreqUpMode=23>>%output%
) else echo %%i=%%j>>%output%
del %input%
ren %output% %input%
pause
当然可以不要临时文件也是可以的,不过文件大的话内存占用比较大,而且也不知道CMD里最多可以有多少变量



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2007-8-14 16:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ansipeter
中级用户

替身



积分 269
发帖 130
注册 2007-3-23
状态 离线
『第 13 楼』:  

你们都够牛X的,不过可以告诉你们,你们的FOR语句都会忽略以;分号开头的行,在我看来还是不完美

2007-8-14 16:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 14 楼』:  

下面的是忽略以:分号开头的行,以;分号开头的行可以正常输出.没有办法,FOR总会忽略某些行.
set input=test.txt
set output=tmp.txt
for /f "eol=: tokens=1,2* delims==" %%i in ('type %input%') do if "%%i"=="FreqUpMode" (echo FreqUpMode=23>>%output%
) else echo %%i=%%j>>%output%
del %input%
ren %output% %input%
pause



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2007-8-14 18:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 15 楼』:  

是不是可以指定一个非常难得一见的字符作为eol的关键字符呢?
如:☉、∈等等,文件中第一个字符是这种情况的应该不多吧?

2007-8-14 18:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: