标题: 怎么样替换文本中的字符串
[打印本页]
作者: kidzgy
时间: 2007-8-4 18:38
标题: 怎么样替换文本中的字符串
比如说,
FreqUpMode=*
(*代表任意数字,可替换的数字)
我要寻找FreqUpMode,不管*的数字是什么,我要替换它为3。
作者: slore
时间: 2007-8-4 19:32
UE可以……
作者: kidzgy
时间: 2007-8-4 20:21
我要用BAT哦。批处理命令
作者: wudixin96
时间: 2007-8-4 21:59
P中似乎只有用sed外部命令才能替换,
纯P的话,只能导到新文件里。
作者: sonicandy
时间: 2007-8-4 22:05
这个代码可以实现楼主的要求,不过有两个缺陷
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 ]
作者: kidzgy
时间: 2007-8-5 07:48
楼上的真比熊猫还讨人喜爱。谢谢。
你所说的两个缺点倒没有什么所谓,不影响ini的使用,可是我发现的缺点就是,速度比较慢了一点。
作者: kidzgy
时间: 2007-8-5 08:03
仔细弄了弄发现,如果输入输出同一个文件的话,那只能把新修改的内容增加到原来的文件上。这样就出现两份内容,一份修改前的,一份是修改后的,这样就没有达到替换字符串的要求。
作者: sonicandy
时间: 2007-8-5 10:35
不客气,这样应该就可以了.
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
作者: slore
时间: 2007-8-5 10:57
早说是ini格式的文件……
FreqUpMode=48asdfadf
FreqUpMode=99;FreqUpMode=81
FreqUpModes=12122121test这种P是很难做到的
作者: kidzgy
时间: 2007-8-5 15:23
回9楼
不瞒你,8楼已经做到了。
作者: slore
时间: 2007-8-14 12:15
Quote: |
Originally posted by kidzgy at 2007-8-5 15:23:
回9楼
不瞒你,8楼已经做到了。 |
|
早说是ini格式的文件……
FreqUpMode=23
FreqUpMode=23
FreqUpModes=12122121test这种P是很难做到的
这个是运行后的结果?做到了?
作者: 不得不爱
时间: 2007-8-14 16:36
我来个简单点的:
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里最多可以有多少变量
作者: ansipeter
时间: 2007-8-14 16:57
你们都够牛X的,不过可以告诉你们,你们的FOR语句都会忽略以;分号开头的行,在我看来还是不完美
作者: 不得不爱
时间: 2007-8-14 18:21
下面的是忽略以:分号开头的行,以;分号开头的行可以正常输出.没有办法,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
作者: youxi01
时间: 2007-8-14 18:42
是不是可以指定一个非常难得一见的字符作为eol的关键字符呢?
如:☉、∈等等,文件中第一个字符是这种情况的应该不多吧?
作者: 不得不爱
时间: 2007-8-14 19:32
是啊!
作者: ansipeter
时间: 2007-8-14 21:09
其实是有办法的
请看:
http://hi.baidu.com/forever9527/ ... a8b28a4610642c.html
作者: zerocq
时间: 2007-8-14 22:07
for /f "delims=" %a in (test.txt) do @echo %a|find "FreqUpMode"||echo %a>>temp.txt&&echo FreqUpMode=3>>temp.txt
这样行吗
[
Last edited by zerocq on 2007-8-14 at 10:08 PM ]