多行搜索和替换工具

时间:2008-11-06 09:23:51

标签: search

我正在寻找一种工具来替换项目中的多行。例如:

#include "../DiscreteIO/Discrete.h"
#include "../PCI/pci.h"
#include "../Arinc429/ARINC429.h"

#include "../PCI/pci.h"
#include "../DiscreteIO/DiscreteHW.h"
#include "../DiscreteIO/Discrete.h"

我尝试了两种适用于此类搜索和替换的工具。 WildeditActual search and replace两者似乎都是出色的工具,但却是共享软件。有人知道类似的工具吗?有什么免费或是时候分钱了吗?

澄清:

整个项目在这种情况下意味着一千多个c文件。文本编辑器一次只能执行一个文件(Textpad,Programmers notepad)或所有打开的文件(nodepad ++)。我没有尝试任何其他编辑,但我认为他们会有类似的问题。如果我错了,请纠正我。

像sed& amp; awk是一个解决方案但是存在问题,因为我不经常使用它们并且需要花一些时间来工作,因为我不是工具专家。

答案是:所有这些......

Ultra编辑可以工作,但我已经有一个编辑器,如果我打算将它用作搜索和替换工具,价格会很高。

Sed,AWK和基于正则表达式的工具可以工作,但在某些情况下会很麻烦。

Wild Edit可以工作,而且价格不贵。

我最终的决定是运用我的正则表达技巧。

14 个答案:

答案 0 :(得分:12)

JetBrains系列IDE:IntelliJRubyMinePHPStorm等将进行多行搜索和替换。

选择相关文字,然后按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)

只有一次拍摄交钥匙的东西才是Dreamweaver .... enter image description here

答案 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,支持正则表达式和很多选项,还有一些我以前用过的。

PS:我忘记了。简单搜索 - 替换不会进行多行替换。显然,FileMenu工具都没有。 grepWin可以做(例如使用\ r \ n)。 我确实记得这些带有多行搜索/替换字段的免费工具,但我手边没有他们的名字。

答案 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搜索。

  • 打开VS代码
  • 文件→打开文件夹,打开文件所在的文件夹
  • 打开文件,然后选择要替换的文本
  • CTRL + SHIFT + H打开搜索和替换
  • 如果您选择了文本,它将自动填充,甚至多行。否则,输入文本,使用SHIFT + Enter插入换行符,并有选择地启用Regexp。
  • 输入替换文字
  • 按Enter键开始搜索
  • 单击更改项以并排预览更改
  • 使用全部替换按钮(CTRL + ALT + Enter)应用并保存更改

答案 13 :(得分:-1)

对于Windows平台,我可以推荐上面给出的UltraEdit-32建议 - 它是一个很棒的工具,非常物有所值。 除此之外,我认为你最好的选择是要么是一个小的perl脚本,要么就像上面提到的那样awk / sed。