我正在寻找一种工具来替换项目中的多行。例如:
#include "../DiscreteIO/Discrete.h"
#include "../PCI/pci.h"
#include "../Arinc429/ARINC429.h"
与
#include "../PCI/pci.h"
#include "../DiscreteIO/DiscreteHW.h"
#include "../DiscreteIO/Discrete.h"
我尝试了两种适用于此类搜索和替换的工具。 Wildedit和Actual search and replace两者似乎都是出色的工具,但却是共享软件。有人知道类似的工具吗?有什么免费或是时候分钱了吗?
澄清:
整个项目在这种情况下意味着一千多个c文件。文本编辑器一次只能执行一个文件(Textpad,Programmers notepad)或所有打开的文件(nodepad ++)。我没有尝试任何其他编辑,但我认为他们会有类似的问题。如果我错了,请纠正我。
像sed& amp; awk是一个解决方案但是存在问题,因为我不经常使用它们并且需要花一些时间来工作,因为我不是工具专家。
答案是:所有这些......
Ultra编辑可以工作,但我已经有一个编辑器,如果我打算将它用作搜索和替换工具,价格会很高。
Sed,AWK和基于正则表达式的工具可以工作,但在某些情况下会很麻烦。
Wild Edit可以工作,而且价格不贵。
我最终的决定是运用我的正则表达技巧。
答案 0 :(得分:12)
JetBrains系列IDE:IntelliJ,RubyMine,PHPStorm等将进行多行搜索和替换。
选择相关文字,然后按ctrl-shift-F
- 这将打开替换对话框,将所选文本作为查找表达式(使用带有换行符的正则表格转义为\n
)
答案 1 :(得分:9)
sed会做你想做的事。
请参阅此处的常见问题解答条目http://sed.sourceforge.net/sedfaq4.html#s4.23.3
如果你需要匹配一个静态块 文本(可能出现任意数量的文本 整个文件的时间),在哪里 块的内容在中已知 提前,然后这个脚本很容易 使用
Sed适用于Windows。见http://gnuwin32.sourceforge.net/packages/sed.htm
答案 2 :(得分:4)
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' {} \;
HTH
答案 3 :(得分:2)
答案 4 :(得分:1)
RegexSearch有点难看,但对于这类事情来说是一个非常有用的工具。
答案 5 :(得分:1)
我发现的最好的工具是一件名为BK ReplaceEm的免费软件。界面需要一些习惯,但值得学习如何使用它。该工具非常强大,允许您使用或不使用正则表达式进行多行替换。
答案 6 :(得分:1)
我不允许发表评论,但接受的解决方案引用了一个似乎已被打破的例子。第18行应该是:
s,[/\.*[],\\&,g
不
s,[/\[.*],\\&,g
后者会抱怨现代的sed(或者如果你是* BSD的话,那就是关于第18行的未终止的表达)。
答案 7 :(得分:0)
Ultraedit可以做到这一点。我为此分钱了。
a tutorial on multi-line find & replace可以使用“replace in files”来申请多个文件。
答案 8 :(得分:0)
我很确定sed,awk和/或grep的组合可以完成这项工作。它们是免费的,随附任何Linux发行版,但也存在Windows版本。
答案 9 :(得分:0)
当人们在没有告诉他们需要哪些平台的情况下请求工具时,我总是感到困惑......在这些情况下,我认为默认情况下是Windows ...
有许多适用于Windows的搜索/替换工具,或多或少功能强大,很多都是免费的
目前,我使用FileMenu Tools的搜索/替换模块,功能强大(你可以使用正则表达式),还有许多其他好东西。
我还有RJL Soft的Simple Search-Replace(没有RE),TortoiseSVN作者的grepWin,支持正则表达式和很多选项,还有一些我以前用过的。
答案 10 :(得分:0)
#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
答案 11 :(得分:0)
我成功使用了多个查找和替换1.10,这是一个免费软件程序:在TXT或TXT列表中搜索多行,并将其替换为您希望的其他文本或删除它们。我在这里找到了它的下载:http://www.softpedia.com/get/System/File-Management/Multiple-Find-And-Replace.shtml
答案 12 :(得分:0)
Visual Studio Code具有出色的“全局”搜索和替换功能。我只是将其用于对多个文件的多个多行更改,包括一些具有捕获和替换功能的Regexp搜索。
答案 13 :(得分:-1)
对于Windows平台,我可以推荐上面给出的UltraEdit-32建议 - 它是一个很棒的工具,非常物有所值。 除此之外,我认为你最好的选择是要么是一个小的perl脚本,要么就像上面提到的那样awk / sed。