Search 多行搜索和替换工具
我正在寻找一个工具,以取代通过一个项目的多行。例如:Search 多行搜索和替换工具,search,Search,我正在寻找一个工具,以取代通过一个项目的多行。例如: #include "../DiscreteIO/Discrete.h" #include "../PCI/pci.h" #include "../Arinc429/ARINC429.h" 与 我已经尝试了两个工具,用于这种类型的搜索和替换。两者似乎都是优秀的工具,但都是共享软件。有人知道类似的工具吗?有免费的吗?还是该放弃一些钱了 澄清: 整个项目在这种情况下,意味着一千多个c文件。文本编辑器一次只能执行一个文件(Textpad、程序员记事
#include "../DiscreteIO/Discrete.h"
#include "../PCI/pci.h"
#include "../Arinc429/ARINC429.h"
与
我已经尝试了两个工具,用于这种类型的搜索和替换。两者似乎都是优秀的工具,但都是共享软件。有人知道类似的工具吗?有免费的吗?还是该放弃一些钱了
澄清:
整个项目在这种情况下,意味着一千多个c文件。文本编辑器一次只能执行一个文件(Textpad、程序员记事本)或所有打开的文件(nodepad++)。我没有试过其他的编辑,但我想他们也会有类似的问题。如果我错了,请纠正我
像sed&awk这样的工具是一种解决方案,但会带来问题,因为我不经常使用它们,而且需要花一些时间来做一些事情,因为我不是工具方面的专家
答案是:所有这些
超编辑可以工作,但我已经有了一个编辑器,如果我只是想用它作为一个搜索和替换工具,价格是很高的
Sed、AWK和基于正则表达式的工具可以工作,但在某些情况下可能会带来麻烦
野生编辑可以工作,并没有那么昂贵
我的最终决定是使用正则表达式技能。可以做到这一点。我为此放弃了金钱
您可以使用“”将其应用于多个文件。我非常确定sed、awk和/或grep的组合可以完成这项工作。它们是免费的,随任何Linux发行版一起提供,但Windows版本也存在。sed将满足您的需要 请参见此处的FAQ条目 如果需要匹配 文本(可出现在任意数量的 文件中的时间),其中 块的内容在中是已知的 高级,那么这个脚本很容易理解 使用
Sed可用于Windows。参见当人们要求工具而不告诉他们需要哪个平台时,我总是感到困惑。。。在这些情况下,我认为默认情况下,Windows Windows有许多可用的搜索/替换工具,功能或多或少,其中许多是免费的。
目前,我使用的搜索/替换模块功能强大,令人惊讶(您可以使用正则表达式),并附带了许多其他功能。
我也有RJL软件的(无REs),OtteroiseSVN作者的,支持正则表达式和许多选项,还有一些我过去使用过的 附言:我忘了。简单搜索替换不会执行多行替换。显然,这两个文件都不是菜单工具。grepWin可以执行(例如使用\r\n)。
我确实记得这些带有多行搜索/替换字段的免费工具,但我手头上没有它们的名称。有点难看,但对于这类事情来说是一个非常有用的工具。我找到的最好的工具是一个名为。这个界面需要一点时间来适应,但是学习如何使用它是值得的。该工具非常强大,允许您使用或不使用正则表达式进行多行替换。
#请参阅底部的文档
#see docs at the bottom
use strict;
use warnings;
use Cwd;
use File::Find;
my $search_patternFilePath=$ARGV[0] ;
my $replace_patternFilePath =$ARGV[1];
my $file_pattern = $ARGV[2];
# Usage
(@ARGV == 3 ) || die ("Usage: FindAndReplace.pl pathToFileContaingTheMultiLineSearchText FullPathToFileContainingMultiLineReplaceText FilePattern . Example: perl MultiLineFindAndReplace.pl \"D:\Opera\New Folder\search.txt\" \"D:\Opera\replace.txt\" bak");
find(\&d, cwd);
sub d {
my $file = $File::Find::name;
$file =~ s,/,\\,g;
return unless -f $file;
return unless $file =~ /$file_pattern/;
my $searchPatternString = &slurpFile ( $search_patternFilePath ) ;
my $replacePatternString = &slurpFile ( $replace_patternFilePath ) ;
my $fileStr = &slurpFile ( $file ) ;
$fileStr =~ s/$searchPatternString/$replacePatternString/igo ;
open(FILEHANDLE,">$file") || die "cannot open output file";
print (FILEHANDLE "$fileStr");
close FILEHANDLE ;
}
sub slurpFile
{
my $file = shift ;
print "\$file is $file" ;
local( $/, *FILE ) ;
open (FILE , $file) or
die "Cannot find $file !!! " ;
my $fileString = <FILE>; #slurp the whole file into one string !!!
close FILE ;
return $fileString ;
}
#Purpose : performs recursive find and replace based on pеrl regexes from the current directory
#the search and replace is case insensitive
#Usage
#perl MultiLineFindAndReplace.pl "D:\Opera\New Folder\search.txt" "D:\Opera\replace.txt" bak
严格使用;
使用警告;
使用化学武器;
使用File::Find;
我的$search_patternFilePath=$ARGV[0];
my$replace_patternFilePath=$ARGV[1];
my$file_pattern=$ARGV[2];
#用法
(@ARGV==3)| | die(“用法:FindAndReplace.pl pathtofilecontainingthemultilinesearchtext fullpathtofilecontainingmultiliereplacetext文件模式。示例:perl multilineindreplace.pl\'D:\Opera\New Folder\search.txt\'D:\Opera\replace.txt\'bak”);
查找(\&d,cwd);
副d{
我的$file=$file::Find::name;
$file=~s,/,\\,g;
返回,除非-f$文件;
除非$file=~/$file_pattern/,否则返回;
我的$searchPatternString=&slurpFile($search\u patternFilePath);
my$replacePatternString=&slurpFile($replace\u patternFilePath);
my$fileStr=&slurpFile($file);
$fileStr=~s/$searchPatternString/$replacePatternString/igo;
打开(FILEHANDLE,“>$file”)| | die“无法打开输出文件”;
打印(文件句柄“$fileStr”);
关闭文件句柄;
}
子文件
{
我的$file=shift;
打印“\$file是$file”;
本地($/,*文件);
打开(文件,$FILE)或
die“找不到$file!!!”;
我的$fileString=;#将整个文件拖成一个字符串!!!
关闭文件;
返回$fileString;
}
#目的:基于当前目录中的pörl正则表达式执行递归查找和替换
#搜索和替换不区分大小写
#用法
#perl multilineindredreplace.pl“D:\Opera\New Folder\search.txt”“D:\Opera\replace.txt”bak
HTH我成功地使用了Multiple Find And Replace 1.10,这是一个免费软件程序,它可以做到这一点:在一个TXT文件或TXT文件列表中搜索多行,并根据您的意愿用其他文本替换或删除它们。我在这里找到它是为了下载:JetBrains系列的IDE:,等将进行多行搜索和替换
选择有问题的文本并按ctrl-shift-F——这将打开替换对话框,将所选文本作为查找表达式(使用带有换行符的正则表达式,换行符转义为
\n
)我不允许评论,但接受的解决方案引用了一个似乎不正确的示例。第18行应为:
s,[/\.*[],\\&,g
不是
后者会向现代sed(如果您在*BSD中,则称为“gsed”)投诉第18行的未终止表达式。唯一一个一次性有效的方法是dreamweaver….具有非常好的“全局”搜索和替换功能。我只是使用它对许多文件进行多行更改,包括一些带有捕获和替换的Regexp搜索
- 开放VS代码
- 文件→ 打开文件夹,打开文件所在的文件夹
- 打开文件并选择要替换的文本
- CTRL+SHIFT+H打开“搜索和替换”
- 如果您选择了一个文本,它将自动填充,甚至多行。否则,请输入文本,使用SHIFT+enter插入换行符,并可以选择启用Regexp
- 输入替换文本
- 压榨
cd $PROJECTDIR && find . -iname '*.*' -exec vim -c 's:^first line of text\nsecond line of text\n3rd line of text:new 1st line\rnew 2nd\rnew 3rd:' -c 'w!' -c 'q' {} \;
s,[/\.*[],\\&,g
s,[/\[.*],\\&,g