search - subtitulado - Herramienta de búsqueda y reemplazo de líneas múltiples
searching trailer (13)
Estoy buscando una herramienta para reemplazar múltiples líneas a través de un proyecto. Por ejemplo:
#include "../DiscreteIO/Discrete.h"
#include "../PCI/pci.h"
#include "../Arinc429/ARINC429.h"
con
#include "../PCI/pci.h"
#include "../DiscreteIO/DiscreteHW.h"
#include "../DiscreteIO/Discrete.h"
He probado dos herramientas que funcionan para este tipo de búsqueda y reemplazo. Búsqueda y reemplazo de Wildedit y real Ambos parecen ser herramientas excelentes, pero son shareware. ¿Alguien sabe de herramientas similares? ¿Hay algo gratis o es hora de desprenderse de algo de dinero?
Aclaración:
a través de un proyecto en este caso significa más de mil archivos c. Los editores de texto pueden hacer esto solo un archivo a la vez (Textpad, Bloc de notas de programadores) o en todos los archivos abiertos (nodepad ++). No he probado ninguno de los otros editores pero supongo que tendrán problemas similares. Por favor, corríjame si estoy equivocado.
Las herramientas como sed & awk son una solución, pero presentan problemas ya que no las utilizo con regularidad y necesito dedicar algo de tiempo a hacer que funcione algo, ya que no soy un experto en las herramientas.
La respuesta es: Todo ...
Ultra edit puede funcionar, pero ya tengo un editor y el precio es alto si solo voy a usarlo como una herramienta de búsqueda y reemplazo.
Las herramientas basadas en sed, AWK y expresión regular pueden funcionar, pero pueden ser un problema en algunos casos.
Wild Edit puede funcionar y no es tan caro.
Mi decisión al final es trabajar mis habilidades de expresión regular.
Estoy bastante seguro de que una combinación de sed, awk y / o grep haría el trabajo. Son gratuitos y vienen con cualquier distribución de Linux, pero también existen versiones de Windows.
Siempre estoy perplejo cuando las personas piden herramientas sin decir para qué plataforma (s) las necesitan ... En estos casos, supongo que es, por defecto, para Windows ...
Hay varias herramientas de búsqueda / reemplazo disponibles para Windows, más o menos potentes, muchas de ellas gratuitas.
Actualmente, utilizo el módulo Buscar / Reemplazar de Herramientas de FileMenu , sorprendentemente poderoso (puedes usar expresiones regulares), y viene con muchas otras cosas.
También tengo Búsqueda simple-Reemplazar de RJL Soft (sin RE), grepWin del autor de TortoiseSVN , apoyo de expresiones regulares y un buen número de opciones, y hay algunas otras que utilicé en el pasado.
PD .: lo olvidé. Simple Search-Replace no reemplazará varias líneas. Ni herramientas de FileMenu, al parecer. grepWin puede hacer (usando / r / n por ejemplo). Recuerdo esas herramientas gratuitas con campos de búsqueda / reemplazo de líneas múltiples, pero no tengo sus nombres a mano.
RegexSearch es un poco feo, pero una herramienta muy útil para este tipo de cosas.
Ultraedit puede hacer eso. Me separé de dinero para ello.
Hay un tutorial sobre búsqueda y reemplazo de líneas múltiples que puede usar con " reemplazar en archivos " para aplicarlo a varios archivos.
Para una plataforma de Windows, puedo secundar la sugerencia de UltraEdit-32 dada anteriormente: es una herramienta maravillosa, y bien vale la pena el dinero. Aparte de eso, creo que tu mejor opción será ser un pequeño script de perl, o bien awk / sed, de nuevo como se mencionó anteriormente.
La mejor herramienta que he encontrado es una pieza de freeware llamada BK ReplaceEm . La interfaz toma un tiempo para acostumbrarse, pero vale la pena aprender a usarla. La herramienta es muy poderosa y le permite hacer reemplazos multilínea con o sin expresiones regulares.
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
#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
Utilicé con éxito Multiple Find And Replace 1.10, un programa freeware que hace justamente eso: busca múltiples líneas en un TXT o lista de TXT y las reemplaza con otro texto cuando lo desee o las elimina. Lo encontré aquí para su descarga: http://www.softpedia.com/get/System/File-Management/Multiple-Find-And-Replace.shtml
sed hará lo que quieras.
Consulte la entrada de preguntas frecuentes sobre exactamente esto aquí http://sed.sourceforge.net/sedfaq4.html#s4.23.3
Si necesita unir un bloque de texto estático (que puede aparecer varias veces en un archivo), donde los contenidos del bloque se conocen de antemano, este script es fácil de usar
Sed está disponible para Windows. Ver http://gnuwin32.sourceforge.net/packages/sed.htm
La familia de IDEs de JetBrains: IntelliJ , RubyMine , PHPStorm , etc. harán una búsqueda y reemplazo de líneas múltiples.
Seleccione el texto en cuestión y presione ctrl-shift-F
- esto abrirá el cuadro de diálogo reemplazar con el texto seleccionado como expresión de búsqueda (usando una expresión regular con líneas nuevas escapadas como /n
)
No puedo comentar, pero la solución aceptada cita un ejemplo que parece estar roto. La línea 18 debe ser:
s,[//.*[],//&,g
No
s,[//[.*],//&,g
Este último se quejará con sed moderno (o "gsed" si está en * BSD) sobre una expresión sin terminación en la línea 18.