Подтвердить что ты не робот

Инструмент поиска и замены нескольких строк

Я ищу инструмент для замены нескольких строк через проект. Например:

#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 и Фактический поиск и замена Оба кажутся отличные инструменты, но условно-бесплатные. Кто-нибудь знает о подобных инструментах? Что-нибудь бесплатное или пора расстаться с деньгами?

Уточнение:

через проект в этом случае означает тысячу файлов с плюсом. Текстовые редакторы могут делать это только по одному файлу за раз (блокнот Textpad, Programmers) или во всех открытых файлах (nodepad ++). Я не пробовал ни одного из других редакторов, но я предполагаю, что у них будут подобные проблемы. Пожалуйста, поправьте меня, если я ошибаюсь.

Инструменты, такие как sed и awk, являются решением, но представляют проблемы, поскольку я не использую их регулярно и вам нужно потратить некоторое время на то, чтобы что-то работать, так как я не эксперт в инструментах.

Ответ: Все это...

Ультра редактирование может работать, но у меня уже есть редактор, и цена крутая, если я просто использую его как инструмент поиска и замены.

Sed, AWK и инструменты, основанные на регулярном выражении, могут работать, но могут быть больными в некоторых случаях.

Wild Edit может работать и не так дорого.

Мое решение в конце концов - это работать с моими навыками регулярного выражения.

4b9b3361

Ответ 1

sed сделает то, что вы хотите.

См. запись в FAQ о том, как это происходит здесь http://sed.sourceforge.net/sedfaq4.html#s4.23.3

Если вам нужно сопоставить статический блок текста (что может иметь место любое количество по всему файлу), где содержимое блока известно в заранее, то это script легко использовать

Sed доступен для Windows. См. http://gnuwin32.sourceforge.net/packages/sed.htm

Ответ 2

Семейство IDE JetBrains: IntelliJ, RubyMine, PHPStorm и т.д. будут выполнять поиск и замену нескольких строк.

Выберите соответствующий текст и нажмите ctrl-shift-F - это откроет диалог замены выбранным текстом в качестве выражения поиска (с использованием регулярного выражения с символами новой строки, экранированными как \n)

Ответ 3

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

НТН

Ответ 4

Единственное, что работает под ключ одним выстрелом, - это мечтатель. введите описание изображения здесь

Ответ 5

RegexSearch - немного уродливый, но очень полезный инструмент для такого рода вещей.

Ответ 6

Лучший инструмент, который я нашел, - это часть бесплатного программного обеспечения, называемого BK ReplaceEm. Интерфейс немного привыкает, но стоит изучить, как его использовать. Инструмент очень мощный и позволяет выполнять многострочные замены с регулярными выражениями или без них.

Ответ 7

Мне не разрешено комментировать, но принятое решение приводит пример, который кажется сломанным. Строка 18 должна быть:

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

Не

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

Последний будет жаловаться на современное sed (или "gsed", если вы в * BSD) о неисчерпаемом выражении в строке 18.

Ответ 9

Я уверен, что сочетание sed, awk и/или grep выполнит эту работу. Они бесплатны и поставляются с любым дистрибутивом Linux, но также существуют версии Windows.

Ответ 10

Я всегда сбиваюсь с толку, когда люди просят инструменты, не сообщая, для какой платформы они нужны им... В этих случаях я полагаю, что это по умолчанию для Windows...

Существует ряд инструментов поиска/замены, доступных для Windows, более или менее мощных, многие из которых бесплатны.
В настоящее время я использую модуль поиска/замены FileMenu Tools, удивительно мощный (вы можете использовать регулярные выражения), пришедшая с множеством других положительных героев.
У меня также есть RJL Soft Простой поиск-замена (без RE), автор TortoiseSVN grepWin, поддерживающий регулярные выражения и большое количество опций, а также некоторые другие, которые я использовал в прошлом.

PS: Я забыл. Простой поиск-замена не будет выполнять многострочные замены. По-видимому, ни FileMenu Tools. grepWin может делать (например, с помощью \r\n). Я действительно вспоминаю такие бесплатные инструменты с многострочными полями поиска/замены, но у меня нет их имен под рукой.

Ответ 11

#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

Ответ 12

Я успешно использовал Multiple Find And Replace 1.10, бесплатную программу, которая делает именно это: выполняет поиск нескольких строк в TXT или списке TXT и заменяет их другим текстом по вашему желанию или удаляет их. Я нашел его здесь для загрузки: http://www.softpedia.com/get/System/File-Management/Multiple-Find-And-Replace.shtml

Ответ 13

Visual Studio Code обладает исключительно хорошим "глобальным" поиском и заменой. Я просто использовал его для множественных многострочных изменений во многих файлах, включая поиск в Regexp с захватом и заменой.

  • Открытый код VS
  • Файл → Открыть папку, открыть папку, в которой находятся ваши файлы
  • Откройте файл и выберите текст, который вы хотите заменить
  • CTRL + SHIFT + H, чтобы открыть Поиск и замена
  • Если вы выбрали текст, он будет автоматически заполняться, даже многострочным. В противном случае введите текст, используйте клавиши SHIFT + Enter для вставки новых строк и при необходимости включите регулярное выражение.
  • Введите текст замены
  • Нажмите Enter, чтобы начать поиск
  • Нажмите на элементы изменений, чтобы просмотреть изменения рядом
  • Используйте кнопку Заменить все (CTRL + ALT + Enter), чтобы применить и сохранить изменения

Ответ 14

Для платформы Windows я могу повторить предложенное UltraEdit-32 предложение - это замечательный инструмент, и он стоит денег. Другое, тогда, я думаю, ваш лучший выбор будет либо небольшим perl script, либо еще awk/sed, как уже упоминалось выше.