Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 多行搜索和替换工具_Search - Fatal编程技术网

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