text-processing – Reemplazar cadena de varias líneas en archivos

Pregunta:

Tengo varios archivos que quiero actualizar reemplazando una cadena de varias líneas con otra cadena de varias líneas. Algo parecido a:

* Some text, 
* something else
* another thing

Y quiero reemplazarlo con:

* This is completely
* different text

El resultado sería que después del reemplazo, el archivo que contiene el primer bloque de texto, ahora contendrá la segunda cadena (el resto del archivo no se modifica).

Parte del problema es que tengo que encontrar la lista de archivos que se actualizarán en el sistema de archivos. Supongo que puedo usar grep para eso (aunque nuevamente, eso no es tan fácil de hacer con cadenas de varias líneas) y luego conectarlo en sed, ¿tal vez?

¿Hay una forma fácil de hacer esto? Sed es una opción, pero es incómoda porque tengo que agregar \ n, etc. ¿Hay alguna manera de decir "tomar la entrada de este archivo, combinarla en esos archivos y luego reemplazarla con el contenido de este otro archivo"? Puedo usar Python si es necesario, pero quiero algo rápido y simple, así que si hay una utilidad disponible, prefiero usarla que escribir mi propio script (que sé cómo hacerlo).

Respuesta:

Sustituya "Alguna … \ n … cosa" por el contenido del archivo "nuevo" en uno o más archivos de entrada

perl -i -p0e 's/Some.*?thing\n/`cat new`/se' input.txt ...
  1. -i para cambiar input.txt directamente
  2. -p0 slurp archivo de entrada de archivo e imprimirlo al final
  3. s/regexp/.../s en regexp . es .|\n
  4. s/.../exp/e reemplazar por eval(exp)
  5. nuevo: un archivo que contiene el texto de reemplazo (esto es completamente … texto diferente)
  6. si es útil, puede expandir el texto original s/Some text\n...\n...thing\n/...

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım