2008-11-06 10 views
18

프로젝트를 통해 여러 줄을 바꾸는 도구를 찾고 있습니다. 예를 들어 :멀티 라인 검색 및 바꾸기 도구

#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 파일을 의미합니다. 텍스트 편집기는 한 번에 하나의 파일 (텍스트 패드, 프로그래머 메모장) 또는 열려있는 모든 파일 (nodepad ++)에서만이 작업을 수행 할 수 있습니다. 나는 다른 편집자들 중 아무도 시도하지 않았지만 비슷한 문제가 있다고 가정한다. 내가 틀렸다면 나를 바로 잡아주세요.

sed &과 같은 도구 awk는 솔루션이지만 문제가 있습니다. 정기적으로 사용하지 않기 때문에 도구에 대한 전문가가 아니기 때문에 뭔가 시간을 할애해야합니다. ... 그것의 모든

울트라 편집 작업을 할 수 있지만 이미 편집기를 가지고 난 그냥 검색으로 사용하고 도구를 대체하기 위하여려고하는 경우 가격이 가파른 :

대답이다.

Sed, AWK 및 정규 표현식 기반 도구는 작동하지만 경우에 따라 고통을 줄 수 있습니다.

와일드 편집이 효과적 일 수 있으며 그리 비싸지는 않습니다.

내 결론은 내 정규 표현 기술을 사용하는 것입니다.

+0

이다, UltraEdit는 파일, 편집기에서 열려 있지 수천 작업 할 수 있습니다. –

+0

비슷한 질문 [여기] (http : // stackoverflow.com/questions/102083/whats-the-best-tool-to-find-and-replace-regular-expressions-over-multiple-files) –

+0

항상이 파일들을 함께 사용해야한다면, 필요할 때 필요한 것을 포함하는 단일 헤더? 헤더가 임의의 순서로 포함될 수 있다면 가장 좋을 것입니다. 각 헤더는 [자체 포함 및 멱등 원]이어야합니다 (http://stackoverflow.com/questions/1804486). 그리고 [../'] (http://stackoverflow.com/questions/597318) 표기법도 제거하는 것이 좋습니다. –

답변

9

sed가 원하는대로 할 수 있습니다. 당신이 (파일을 통해 여러 번 발생할 수 있습니다) 텍스트의 정적 블록의의 내용과 일치해야하는 경우

정확히이 여기 http://sed.sourceforge.net/sedfaq4.html#s4.23.3

에 대한 FAQ를 참조하십시오 블록이 사전에 알려진,이 스크립트는 에

Sed의 Windows 용 사용할 수 있습니다 사용 쉽습니다. http://gnuwin32.sourceforge.net/packages/sed.htm

+1

내가 뭘 잘못하고 있는지 모르겠지만'sed -nf blockrep.sed findrep.txt' 명령을 실행하여'custom.sed' 파일을 생성하면'sed : file blockrep.sed 18 행 : 끝나지 않은 '명령'. 그 라인 ('s, [/ \ [. *], \\ &, g')에서 정규식을 보면 그것은 나에게 맞는 것처럼 보입니다. –

0

나는 sed, awk 및/또는 grep의 조합이 그 일을 할 것이라고 확신한다. 무료이며 Linux 배포판이 있지만 Windows 버전도 있습니다.

0

사람들이 도구를 필요로하지 않고 도구를 요청할 때 항상 혼란 스럽습니다.이 경우에는 기본적으로 Windows 용이라고 가정합니다.

Windows에서 사용할 수있는 검색/바꾸기 도구는 많거나 적습니다. 그 중 많은 수가 무료입니다.
현재 검색/바꾸기 모듈 FileMenu Tools을 사용합니다. 놀랍게도 (일반 표현식을 사용할 수 있음) 강력한 기능을 제공합니다.
또한 RJL Soft의 Simple Search-Replace (RE는 없음), TortoiseSVN 작성자 grepWin, 정규식과 다양한 옵션을 지원하며 과거에 사용했던 몇 가지가 있습니다.

추신 : 잊어 버렸습니다. 간단한 검색 - 교체는 다중 행 대체를 수행하지 않습니다. FileMenu Tools도 마찬가지입니다. grepWin은 (예를 들어 \ r \ n을 사용하여) 할 수 있습니다. 여러 줄 검색/필드 바꾸기와 같은 무료 도구를 기억하지만 그 이름은 가까이 있지 않습니다.

+0

다른 쓸모없는 답변 ... 링크를 업데이트해야합니다. 크로스 플랫폼 솔루션이 좋을 것입니다. – Sharcoux

+0

@Sharcoux Links? 파일 메뉴 도구 중 하나만 404 페이지로 연결되며, URL에서 두 단계 위로 올라가면 제품을 찾을 수 있습니다! 그 게으름이라고 ... 크로스 플랫폼 : 시도해보십시오 ... – PhiLho

+0

FileMenu 도구는 사용되지 않습니다. sed는 다중 라인에 있어서는 사용자 친화적 인 것이 아닙니다. 간단한 검색 - 바꾸기는 여러 줄 문자를 지원하지 않습니다. 그래서, 아마도 grepWin이 질문에 대답 할 수 있습니다. 나는 그것을 시도하지 않았다는 것을 인정한다. 대답에 grepWin 만 입력하면 아래쪽 투표를 제거합니다 – Sharcoux

1

RegexSearch은 이런 종류의 일에 약간 못 생겼지 만 매우 유용한 도구입니다.

+0

주어진 유형의 모든 파일을 재귀 적으로 바꾸는 데 사용할 수 없었습니다. 재귀 적 지원이 지원되는 것 같습니다. – codingdave

-1

Windows 플랫폼의 경우 위의 UltraEdit-32 제안을 두 번째로 넘어 섰습니다. 훌륭한 도구이며 돈이 충분합니다. 그 외, 나는 최선의 방법은 위에 언급 한 것처럼 작은 펄 스크립트 또는 awk/sed가 될 것이라고 생각합니다.

+0

셰어웨어입니다 – Sharcoux

1

가장 좋은 도구는 프리웨어 인 BK ReplaceEm입니다. 인터페이스는 조금 익숙해졌지만 사용 방법을 배울 가치가 있습니다. 이 도구는 매우 강력하며 정규 표현식의 유무에 관계없이 여러 줄 바꿀 수 있습니다.

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 
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' {} \; 

나는 성공적으로 여러 찾기 및 그냥 할 1.10, 프리웨어 프로그램을 교체 사용

12

JetBrains의 제품군 : IntelliJ, RubyMine, PHPStorm 등 여러 줄 검색을 수행하고 대체합니다 나는 다운로드를 위해 여기를 발견했다.

는 문제의 텍스트를 선택하고 ctrl-shift-F을 누르면 -이 (줄 바꿈이 \n로 이스케이프와 정규식을 사용하여)이

0

내가 언급을 허용하고 있지 않다 찾기 표현식으로 선택한 텍스트와 함께 대화 상자를 대체 열립니다 그러나 받아 들여진 해결책은 부서진 것처럼 보이는보기를 인용한다. 라인 (18)은 다음과 같아야합니다

s,[/\.*[],\\&,g 

하지

과 불평
s,[/\[.*],\\&,g 

후자 나오지 현대 (또는 *의 BSD에 있다면 'gsed') 라인 종결되지 않은 표현에 대해 18

그것이 내가 내 대답에 링크 된 튜토리얼에서 보듯이 한 번에 턴키 방식으로 작동
1

만 건 드림위버 .... enter image description here