Инструмент поиска и замены нескольких строк
Я ищу инструмент для замены нескольких строк через проект. Например:
#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 может работать и не так дорого.
Мое решение в конце концов - это работать с моими навыками регулярного выражения.
Ответы
Ответ 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.
Ответ 8
Ultraedit может это сделать. Я расстался с деньгами за это.
Существует учебник по многострочному поиску и замене, который вы можете использовать с помощью заменить в файлах "для применения к нескольким файлам.
Ответ 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, как уже упоминалось выше.