图片缩略图

在文件中查找和替换

版本1.1.0.1(3.79KB)由 塔克·麦克卢尔
用新文本替换文件列表中的指定文本。

13下载

更新2016年9月01日

查看版本历史记录

查看许可证

此实用程序将用给定字符串替换目标文件中的所有字符串匹配项。这与编辑器中的“全部替换”类似,只是它可以通过编程方式在多个文件上使用。
例如,将所有出现的'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中央文件交换。检索.

意见及评分(22)

伊多伊曼纽尔

添加了一个黑客“模拟”选项,这样你就可以看到即将编辑的行。仅当传递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);
结束
结束

斯科特·安德森

效果很好。我将它与目录中的文件搜索相结合,能够在多个文件中替换一个单词。

subhash

谢谢,我把你的文件放在一个文件夹的循环中。大大缩短了我的时间。
我认为,如果我们有一个返回类型,确认在文件中找到表达式的次数,会更好。
只是为了检查哪些文件有表达式。我会尝试添加代码,但我不知道如何上传这里

科恩·弗洛雷斯

赛斯Bashford

嘉莉·韦德纳

拉胡尔拉曼

桑托什库马尔·卡迪

杰胡塞泽诺格鲁

阿尔伯特·施温

好东西

Sahil聊卡尔拉

谢谢塔克·麦克卢尔,
我得到了很多帮助,但我已经用相同的函数通过其他方式解决了转换[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,清席!

Sahil聊卡尔拉

该文件将替换部分单词
例如x1必须更改为Cor(1)
它将替换x1、x11、x112至Cor(1)、Cor(1)1、Cor(1)12
因此,它需要修正

Mahmudul哈桑

谢谢。

桑迪·琼斯

开膛手,谢谢。

清兮Ooi认为

非常感谢你。这很有帮助!

塔克·麦克卢尔

谢谢你的最新评分,拉米。

问题是输入不是文件列表,而是搜索模式。该实用程序需要一个实际文件列表(包含完整或相对路径)。

如果要在路径上名为“pets.m”的*任何*文件中用“dog”替换“cat”,可以这样做:

find_and_replace ((' - ', ' pets.m '),“猫”,“狗”);

Rami AbouSleiman

Rami AbouSleiman

如果您试图替换当前目录下的文件,代码将失败,原因是第57行:If~exist(file{k},'file')

存在的函数将返回0,函数将不执行。

VEERU TALREJA

非常简单和绝对完美的代码。

亚当·丹兹

易于阅读,直接编码。谢谢

Mazi

伟大的谢谢

MATLAB版本兼容性
使用R2013a创建
与任何版本兼容
平台兼容性
窗户 macOS Linux
致谢

受到启发的:strrepfile

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始狩猎!