此实用程序将用给定字符串替换目标文件中的所有字符串匹配项。这与编辑器中的“全部替换”类似,只是它可以通过编程方式在多个文件上使用。
例如,将所有出现的'abs'替换为'mag':
>>查找和替换(“my\u file.m”、“abs”、“mag”)
“匹配”和“替换”输入都可以是正则表达式。例如,我们可以用my_sqrt(…)替换对sqrt(…)的所有调用,使用正则表达式保留函数的参数。
>>查找和替换(文件名,'sqrt\(.*?\),'my_sqrt\($1\);
有关更多示例:
>>帮助查找和替换;
一些正则表达式的知识对使用此工具很有帮助,但不是必需的。请参阅MATLAB文档中的“正则表达式”。
塔克麦克卢尔(2021)。在文件中查找和替换(//www.tatmou.com/matlabcentral/fileexchange/42877-find-and-replace-in-files), MATLAB中央文件交换。检索.
添加了一个黑客“模拟”选项,这样你就可以看到即将编辑的行。仅当传递mock==1标志时,返回值才为非空。请注意:此代码*不*使用unicode字符-例如,有时这些字符在注释中用于引用文章作者的姓名。
-----------------------------------------------------------------------------------------------------------------------
函数[matches] = find_and_replace(file, expression, replacement,mock)
%查找和替换(文件、要查找、要替换)
%
%用法:查找和替换(get_repo(),'uniform_clr\(.*),'uniclr\($1\),'1)
%
%用新字符串替换给定文件(文件)中的字符串(表达式)
%(替换)。
%
@@函数find_and_replace(file, expression, replacement,mock)
结束
%对于单元格数组中的所有文件。。。
匹配={};
n_tgtf = 0;
For k = 1:length(file)
%确保该文件存在。
@@函数find_and_replace(file, expression, replacement,mock)
'使用regexprep。');
结束
%以二进制形式读入文件并转换为字符。
fid=fopen(文件{k});
text=fread(fid,inf,'*char');
文件关闭(fid);
如果嘲笑
c=regexp(文本、表达式、'forceCellOutput');
匹配{k, 1} = {k}文件;
匹配{k, 2} = c {:};
行= {};
fid=fopen(文件{k});发现=0;ln=1;
tline=fgetl(fid);
而ischar (tline)
c=regexp({tline},表达式);
如果~ isempty (c {:})
发现=发现+1;
行{发现,1}= ln;
行{发现,2}= tline;
结束
tline=fgetl(fid);ln=ln+1;
结束
如果~ isempty()行
n_tgtf=n_tgtf+1;
匹配{n_tgtf 1} = {k}文件;
匹配{n_tgtf,2}=行;
结束
文件关闭(fid);
其他的
%以二进制形式读入文件并转换为字符。
fid=fopen(文件{k});
Lines = fread(fid, inf, '*char')';
文件关闭(fid);
%查找并替换。
Text = regexprep(Text, expression, replacement);
lines=regexprep(行、表达式、替换);
%写出新文件。
Fid = fopen(file{k}, 'w'); / /输出
写入文件(支撑材、文本);
写入文件(支撑材、线);
文件关闭(fid);
结束
结束
效果很好。我将它与目录中的文件搜索相结合,能够在多个文件中替换一个单词。
谢谢,我把你的文件放在一个文件夹的循环中。大大缩短了我的时间。
我认为,如果我们有一个返回类型,确认在文件中找到表达式的次数,会更好。
只是为了检查哪些文件有表达式。我会尝试添加代码,但我不知道如何上传这里
好东西
谢谢塔克·麦克卢尔,
我得到了很多帮助,但我已经用相同的函数通过其他方式解决了转换[x1 x11 x111]的问题。。。。
首先更改x111的所有属性
此后x11和
去年x1
这是使用此代码时应遵循的唯一技术。
但是如果我将代码反向,将[x1 x11 x111]转换为[Cor(1) Cor(1)1 Cor(1)12]
多谢各位
代码写得很好
嗨Sahil聊,
请参见上述说明或:
帮助find_and_replace;
这些解释了如何做你想做的事情。
谢谢Mahmudual Hasan,Sandy Jones,清席!
该文件将替换部分单词
例如x1必须更改为Cor(1)
它将替换x1、x11、x112至Cor(1)、Cor(1)1、Cor(1)12
因此,它需要修正
谢谢。
开膛手,谢谢。
非常感谢你。这很有帮助!
谢谢你的最新评分,拉米。
问题是输入不是文件列表,而是搜索模式。该实用程序需要一个实际文件列表(包含完整或相对路径)。
如果要在路径上名为“pets.m”的*任何*文件中用“dog”替换“cat”,可以这样做:
find_and_replace ((' - ', ' pets.m '),“猫”,“狗”);
如果您试图替换当前目录下的文件,代码将失败,原因是第57行:If~exist(file{k},'file')
存在的函数将返回0,函数将不执行。
非常简单和绝对完美的代码。
易于阅读,直接编码。谢谢
伟大的谢谢