Board logo

标题: [求助]文本内容查找替换 [打印本页]

作者: 5600549976     时间: 2009-6-3 10:13    标题: [求助]文本内容查找替换

有这样一批文本*.txt,内容如下
datacreat=08.11.1
datadel=08.2.01
filecreat=08.10.02
file2creat=08.11.02
能不能实现对*.txt做如下处理:
只要存在datadel=,不管后面的日期是什么,一律替换成datadel=08.01.01
作者: yishanju     时间: 2009-6-3 11:01
fr -ric:"(datadel=)(.*)" -t:"\108.2.01" *.txt

直接修改原文件,注意备份

FR 下载 http://baiy.cn/utils/fr/index.htm
作者: 5600549976     时间: 2009-6-3 23:37
代码很好用,但出现了一个问题,可能是我昨天没有把问题说全,不好意思,还有一行没有写

  Quote:
datacreat=08.11.1
datadel=08.2.01
filecreat=08.10.02
file2creat=08.11.02
yes_no_datadel=yes
max_datadel=21m

结果为

  Quote:
datacreat=08.11.1
datadel=08.2.01
filecreat=08.10.02
file2creat=08.11.02
yes_no_datadel=08.2.01
max_datadel=08.2.01

最后两行也被替换了,因为里边儿含有datadel=
能不能只替换datadel=08.2.01这一行
作者: ccwan     时间: 2009-6-4 01:57
sed "/^datadel/s/=.*/=08.01.01/g" *.txt
作者: yishanju     时间: 2009-6-4 03:04
fr -ric:"(^datadel=)(.*)" -t:"\108.2.01" *.txt
作者: 不得不爱     时间: 2009-6-6 22:58
不要外部命令的:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
del temp.txt
for %%e in (*.txt) do (
for /f "delims=" %%a in (%%e) do (set aa=%%a
if "datadel="=="!aa:~,8!" set aa=datadel=08.01.01
echo !aa!>>temp.txt)
copy/y temp.txt %%e
del temp.txt)

作者: ccwan     时间: 2009-6-7 01:33

@echo off
del tmp.txt
for /f "tokens=1* delims==" %%i in (*.txt) do (if not %%i==datadel (echo %%i=%%j>>tmp.txt) else (echo %%i=08.01.01>>tmp.txt))
copy /y tmp.txt *.txt
del tmp.txt