例如,我有文件sample.txt。该文件包含:
1111101
2222203
3333303
44444A1
55555A1
66666A1
现在,我想替换用户定义的特定模式。例如,我有其他文件,其中use定义了他想要替换的内容。示例文件名是replace.txt。此文件包含2列,第一列为模式,第二列为要替换的文本。
示例:
replace.txt
2222203 2222203ADD
55555A1 55555A1SUB
现在,当批处理文件被执行时,我希望文件sample.txt有这样的内容:
1111101
2222203ADD
3333303
44444A1
55555A1SUB
66666A1
也可以有一个"空间"作为要替换的文本的一部分(第2列?
答案 0 :(得分:1)
您可以使用FindRepl.bat程序,该程序是Batch-JScript混合应用程序,通过正则表达式以非常有效的方式执行这些替换;它使用的JScript语言是XP上所有Windows版本的标准语言。在FindRepl.bat的基本使用中,您将输入文件重定向到它,并将两个字符串作为参数,一个"搜索"字符串和"替换"串。例如:
< sample.txt FindRepl.bat "2222203" "2222203ADD"
上一个命令将2222203
替换文件中的所有2222203ADD
字符串。为了执行多个字符串的替换,您可以在由管道字符分隔的搜索和替换字符串中包含多个替代字符(这称为交替),并包括/ A开关以选择此字符串特征;例如:
< sample.txt FindRepl.bat "2222203|55555A1" /A "2222203ADD|55555A1SUB"
如果要在分离的文件中定义替换集,只需要从文件中加载字符串,将替换组合在两个变量中,并在FindRepl中使用它们,前面等于-sign表示它们是变量,而不是文字字符串。如果您希望字符串可能包含空格,则必须使用不同的字符来分隔搜索和替换文件中的部分。例如,如果您在replace.txt文件中使用冒号:
2222203:2222203 ADD
55555A1:55555A1 SUB
然后下面的批处理文件解决了您的问题:
@echo off
setlocal EnableDelayedExpansion
set "search="
set "replace="
for /F "tokens=1,2 delims=:" %%a in (replace.txt) do (
set "search=!search!|%%a"
set "replace=!replace!|%%b"
)
set "search=!search:~1!"
set "replace=!replace:~1!"
< sample.txt FindRepl.bat =search /A =replace
您可以从this site下载FindRepl.bat并查看其使用说明;您必须将它放在先前程序的同一文件夹中,或者更好的是,放在PATH变量中包含的文件夹中。