当我只知道前几个字符时替换一个字符串

时间:2015-07-20 01:24:08

标签: regex string replace str-replace

我正在尝试编写一个批处理文件,它将在我的文本文件中搜索字符串并替换它。该字符串将是一些永不改变的数字,后跟8个代表日期的数字。我希望能够用当前日期替换该日期,但我不知道当前设置的字符串中的日期是什么,因此我只能通过搜索前4个不变的字符来搜索字符串。

例如我的文本文件中可能有一行代表123419072015(1234)我要替换为123420072015

如何通过搜索该字符串的前4个字符来替换8个字符而不知道它们是什么?

我试图通过搜索来找出问题然后想出这个,只是意识到这种方法对于我正在尝试做的事情有多么有缺陷。不用说我真的不知道我在做什么。 这将用今天的日期替换每一行,留下前4个字符。

set Today=%date:~10,4%%date:~7,2%%date:~4,2%

@echo off

setlocal enabledelayedexpansion

set INTEXTFILE=test_in.txt

set OUTTEXTFILE=test_out.txt

set SEARCHTEXT=1234

set REPLACETEXT=%Today%

SET _startchar=0

SET _length=4

set OUTPUTLINE=

for /f "tokens=1,* delims=¶" %%A in ( '"type %INTEXTFILE%"') do (
SET string=%%A
CALL SET modified=%%string:~%_startchar%,%_length%%%

echo !modified!%Today% >> %OUTTEXTFILE%
)
del %INTEXTFILE%
rename %OUTTEXTFILE% %INTEXTFILE%

当然有一个简单的解决方案吗? 我真的很难通过搜索找到任何东西。 任何帮助都会很棒!

2 个答案:

答案 0 :(得分:1)

最简单的解决方案可能是从GnuWin32工具包中获取sed并使用它,例如

sed "s/\b1234[0-9]\{4\}\([0-9]\{4\}\)\b/12342007\1/g" <%INPUTTEXTFILE% >%OUTPUTTEXTFILE%

根据您提供的信息,找到固定字符串1234后跟八位数字,然后将前四位数字更改为2007。显然,如果您的要求稍微复杂一些,可能需要调整sed命令。

但是,尝试使用cmd语言更容易做到这一点,尽管它已经走了很长一段路,仍然没有达到类似UNIX工具的水平

答案 1 :(得分:0)

听起来你想要像&#34; 1234 [0-9] {8}&#34;或&#34; 1234 \ d {8}&#34;如果你想捕捉独特的部分然后&#34; 1234(\ d {8})&#34;

然后你将替换为%date%$ 1,其中$ 1是()

的匹配