¿Cómo puedo realizar una gran cantidad de diferentes búsquedas / reemplazos?


0

Varias veces tuve un documento de texto en el que necesito aplicar varios cientos de hallazgos / reemplazos. Estos hallazgos / reemplazos no siguen un patrón al que se pueda aplicar razonablemente la expresión regular, y deben aplicarse en orden. Anteriormente he recurrido a hacerlos a mano después de mucho buscar, pero ¿hay una mejor manera?

Respuestas:


1

Corríjame si he entendido mal su pregunta, pero por su descripción, supongo que tiene un .txtdocumento Ascii único (posiblemente muy grande) y que cuando dice que los cambios deben aplicarse "en orden", quiere decir que ' me gustaría hacer la primera búsqueda / reemplazo en todo el documento, luego la segunda búsqueda / reemplazo en todo el documento y así sucesivamente.

Quizás la solución más fácil sería crear un archivo (llamarlo sedscript) que contenga un sedscript, una línea por cambio. Aquí hay un ejemplo. Al gfinal significa "global", es decir, reemplazar todas las ocurrencias, no solo la primera ocurrencia en cualquier línea dada.

s/foo/bar/g
s/hello/world/g
s/yellow/green/g
:

Luego puede ejecutar esto de la siguiente manera:

sed -f sedscript infile.txt > outfile.txt

Si está satisfecho con la salida, simplemente mvvuelva a colocarla sobre la parte superior de la entrada:

mv outfile.txt infile.txt

Si estás en una máquina Linux, eso viene con sed. Si está en Windows, puede obtener sed(y mv) con Cygwin o mi propio shell Hamilton C (incluida la versión gratuita ).

Adicional:

Dado que también le gustaría considerar coincidencias que abarquen los extremos de la línea, entonces, sí, una forma de hacerlo es reemplazar todos los extremos de la línea con un carácter especial o cadena, realice las operaciones de búsqueda / reemplazo que desea y luego coloque los extremos de la línea cuando hayas terminado.

La forma más fácil de hacer las conversiones de final de línea sedes en etapas de canalización separadas. En mi ejemplo aquí, he reemplazado las \r\nsecuencias con un #pero podría ser una cadena completamente arbitraria (pero es más fácil si puede usar un solo carácter).

sed 's/\r\n/#/' infile.txt | s -f sedscript | sed 's/#/\r\n/g' > outfile.txt

Dentro de su sedscriptarchivo, buscaría / reemplazaría en ambas variaciones, con un espacio entre las palabras o lo que sea que lo haya reemplazado.

Si puede usar un solo carácter y no necesita una cadena de caracteres múltiples para garantizar la unicidad, puede usar la \(...\)notación para crear una expresión regular etiquetada alrededor de la [...]lista de caracteres que pueden separar una palabra. Lo que coincida se puede insertar en la cadena de reemplazo como \1.

Aquí hay una captura de pantalla de cómo podría funcionar esto.

Saltos de línea con sed


Entiendes correctamente. ¿Funcionará con caracteres de tabulación y nueva línea como parte de la búsqueda / reemplazo? Y, soy bastante nuevo / incómodo con la línea de comandos, por lo que sería aún más útil si proporciona comandos exactos para usar si el archivo en el que quiero ejecutar los reemplazos se encuentra en C: \ Users \ Eric \ Documents \ sin formato .txt
ete

Funcionaría con caracteres de tabulación en las cadenas de búsqueda o reemplazo, pero no con caracteres de nueva línea incrustados. (Se cuerdas con saltos de línea empotrados un requisito de congruencia?) Reemplazar infile.txtcon su trayectoria real, C:\Users\Eric\Documents\unformatted.txt.
Nicole Hamilton

De acuerdo, es necesario reemplazar las nuevas líneas para muchos de los hallazgos / reemplazos, pero tal vez podría solucionarlo con textfixer.com/tools/remove-line-breaks.php siempre que pueda agregar nuevas líneas con un buscar / reemplazar, es Hay una manera de hacer eso? Y gracias.
ete

¿Están las nuevas líneas allí simplemente para ajustar el texto a unos márgenes convenientes o porque cada línea es un registro separado?
Nicole Hamilton

Las nuevas líneas que se eliminarán son parte del formato que quiero eliminar, no estoy seguro de a qué corresponde.
ete

0

Normalmente, los programas son buenos para aplicar una sola combinación de búsqueda y reemplazo a múltiples archivos, no al revés.

Para mí, parece que su mejor opción es usar un programa procesador de textos con capacidades macro. Luego puede escribir una función que realice el reemplazo y luego invocarla cientos de veces con sus cadenas de búsqueda / reemplazo. Los procesadores de texto habilitados para macros son, por ejemplo, LibreOffice Writer y Microsoft Word.


Esto parece un enfoque razonable, notepad ++ (mi editor de texto habitual) parece tener las funciones, pero no estoy seguro de cómo reemplazar los caracteres de nueva línea correctamente (el modo extendido hace que el reemplazo de cosas con nueva línea funcione bien, pero no reemplazar las nuevas líneas) .
ete

0

FART debería poder ayudarte. Simplemente cree un archivo por lotes con múltiples llamadas FART, y si desea reemplazar las nuevas líneas (\r\n), habilite el uso de la sintaxis de estilo C a través de losparámetros-Co--c-style.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.