Encuentra y reemplaza varios valores diferentes a la vez

15

Tengo un archivo con varias instancias de Text_1y Text1necesito reemplazar ambas cadenas con Text_Ay TextBrespectivamente.

Actualmente estoy haciendo dos funciones Buscar y reemplazar en cada archivo, una que lo encuentra Text_1y lo reemplaza Text_Ay la otra que lo encuentra Text1y lo reemplaza TextB.

¿Hay alguna forma de hacer todo esto de una vez en lugar de tener que ejecutar "Buscar y reemplazar" dos veces?

Estoy usando Dreamweaver CS3, pero también tengo Notepad ++, Notepad normal, OO Writer, MS Word si eso será más fácil. Idealmente, podría hacer esto en Dreamweaver o Notepad ++, pero estoy dispuesto a descargar otra cosa para hacer el trabajo. Prefiero no tener que hacer cosas de la línea de comandos o crear un archivo por lotes (aunque lo sé, no lo entiendo realmente).

En caso de que la descripción anterior no sea clara, déjame explicarte de esta manera ...

Quiero ejecutar Buscar y reemplazar 1 vez en 1 documento y quiero que haga TODO lo siguiente durante esa instancia de Buscar y reemplazar:

  1. Buscar Text_1 y reemplazar conText_A
  2. Buscar Text1 y reemplazar conTextB

Estoy no tratando de hacer un Buscar y reemplazar en varios documentos.

mate
fuente
Puede ser posible usando Regexp buscar y reemplazar si hay un patrón distinto. De lo contrario, no es posible @matt
Sathyajith Bhat

Respuestas:

9

Echa un vistazo a Sed . Puede lograr fácilmente su objetivo con solo una línea de comando

sed -e "s/Text_1/TextA/" -e "s/Text1/TextB/" <your_file.txt>your_file_new.txt

Tuan Anh Hoang-Vu
fuente
24

Desde Notepad ++ 6.0 es realmente posible sin scripts usando la siguiente técnica:

Buscar: Texto_1 y reemplazar con: Texto_A

Buscar: Text2 y reemplazar con: TextB

Buscar: (Texto_1) | (Texto2)

Reemplazar: (? 1Text_A) (? 2TextB)

La sintaxis general es:

Find: (FindA)|(FindB)|(FindC)...

Replace: (?1ReplaceA)(?2ReplaceB)(?3ReplaceC)...

? 1 se refiere a la primera frase capturada y así sucesivamente.

Obtuve esto de la siguiente respuesta: /programming//a/16104946/287101

rakaloof
fuente
3

Usando Notepad ++, puedes

  • Abra todos los archivos que contengan las palabras que desea reemplazar y utilice Buscar / Reemplazar en todos los archivos abiertos

    ingrese la descripción de la imagen aquí

  • Use Buscar / Reemplazar en archivos

    ingrese la descripción de la imagen aquí

  • Grabe una macro realizando las opciones de buscar y reemplazar y reprodúzcala

Sathyajith Bhat
fuente
Eso no es lo que estoy tratando de hacer. No quiero reemplazarlo en varios archivos a la vez, quiero reemplazar varias cadenas en un archivo a la vez. Quiero poder ejecutar una búsqueda y reemplazo y hacer que busque en el documento y reemplace todas las instancias de Text_1 con Text_A y todas las instancias de Text1 con TextB. Dos cadenas separadas reemplazadas con dos valores separados en un archivo.
mate
Los enlaces de imágenes están rotos, ¿hay alguna posibilidad de que pueda solucionarlos de alguna manera?
Bobby
2

Es mejor que ejecutes Buscar y reemplazar dos veces, porque tienes dos reemplazos diferentes. Sin embargo, debe haber muy poca compensación en el tiempo de procesamiento. Considera lo siguiente:

Ejecutando Buscar y reemplazar una vez, buscando término por término:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Para fines de ejecución, asumiremos que es lineal y diremos que esto se ejecuta en tiempo O (n).

Desea encontrar dos términos diferentes. Ejecutar Buscar y reemplazar dos veces se ve así:

Get Term
  Does term match?  If so, replace term
Get Next Term
...

Get Term
  Does term match?  If so, replace term
Get Next Term
...

lo que llevaría tiempo O (2x1n), o el doble de tiempo que buscar un término.

La búsqueda de dos términos con dos reemplazos teóricamente se vería así:

Get Term
  Does first term match?  If so, replace first term
  Does second term match?  If so, replace second term
Get Next Term
...

Obtener los términos no requiere tanta potencia de procesamiento, por lo que esencialmente está buscando dos conjuntos de búsquedas para cada término, dando un tiempo de O (1x2n), ejecutándose una vez pero buscando dos términos.

Si bien ahorraría algo de tiempo al no cargar cada término dos veces, pasaría más tiempo buscando cada término dos veces, por lo que hay poca compensación, y dado que esta característica se usaría con menos frecuencia que la búsqueda de un término con un reemplazo, los desarrolladores de aplicaciones simplemente asumen que no escriben Esa funcionalidad.

DESCARGO DE RESPONSABILIDAD A LOS PROGRAMADORES: Este es un ejemplo generalizado. Sé que es mejor, pero estoy tratando de mostrar por qué no se encuentra esa característica.

Theo
fuente
0

El soporte de expresiones regulares en Notepad ++ está severamente limitado. Sin el operador de alternancia, no hay esperanza de acercarse a lo que quiere hacer. Necesitarás usarsed un editor que tenga mejor compatibilidad con expresiones regulares.

Las extensiones GNU comúnmente utilizadas para la sintaxis de expresiones regulares incluyen:

  • el ? operador, que significa cero o único en su clase;
  • el | operador de alternancia ("foo | bar" coincide con "foo" o "bar")
  • modificadores como / g para codicioso o / i para mayúsculas y minúsculas;
  • {a, b} para denotar entre tob y tokens de un tipo.
  • (patrón) + para mecanizar una o más coincidencias del mismo patrón

El componente Scitilla, que sustenta Notepad ++, es estrictamente compatible con POSIX y no reconoce estas extensiones. Puede consultar Expresiones regulares para un resumen completo y algunos ejemplos

Fuente

Ver también

GNUWin32 sedpara Windows

Pausado hasta nuevo aviso.
fuente
0

Uso TextCrawler para buscar y reemplazar por lotes. (Uso Notepad ++ para búsqueda / reemplazo único en varios archivos, ya que es más rápido que Textcrawler). TextCrawler admite expresiones regulares, así como búsqueda / búsqueda normal. Los archivos por lotes se pueden guardar y volver a cargar para su uso futuro.

Chris
fuente
Consulte ¿Cómo recomiendo el software en mis respuestas? En particular, como mínimo, diga dónde obtener el software.
G-Man dice 'Reincorporar a Monica' el
La función por lotes solo está disponible en la versión Pro no gratuita de TextCrawler.
Hobbes
0

También se puede hacer usando ActiveX Plugin (para Notepad ++) y ejecutando script personalizado:

NppApplication.activeEditor.text
=NppApplication.activeEditor.text
.replace(/Text_1/g,"Text_A")
.replace(/Text1/g,"TextB")
valeryan
fuente
Esto funciona, pero tenga en cuenta que, debido a un error actual en el complemento ActiveX, se agrega un carácter NULO al archivo cada vez que ejecuta el script.
Aidan
-1

Esto funciona para todos los números (para eliminar todos los números del texto / artículo)

  1. Presione Ctrl + H para abrir el cuadro de diálogo Buscar y reemplazar.

  2. En el cuadro "Buscar qué", escriba ^ #

  3. Deje el cuadro "Reemplazar con" vacío.

  4. Reemplaza todo.

Dennis Smith
fuente
1
El OP no solo quiere que se eliminen los números, sino que también deben reemplazarlo con una letra.
booyaa