Tengo que reemplazar un bloque grande de texto (código de script de shell) en un archivo con otro bloque de texto.
Estoy impresionado con el ¿Cómo puedo usar sed para reemplazar una cadena de varias líneas? respondido por antak y Multi-line replace respondido por Bruce Ediger
Pero tengo algunos problemas para usarlos.
antak ya mencionó en su respuesta que transmitir archivos completos (
1h;2,$H;$!d;g;
) al búfer no es recomendable para archivos grandes, porque sobrecarga la memoria.Sé que
sed
se puede usar con la función de bloque para preservar el texto fuera del bloque sin cambios. Quiero usar esta función Pero si lo uso,sed -i '/marker1/,/marker2/s/.*/new text (code)/' filename
insertará texto nuevo (código) repetidamente para cada transmisión. Por lo tanto, tengo que hacer el bloque visual como una secuencia, usando algo similar a lo sugerido por antak anteriormente, pero para el bloque (no para todo el archivo).
Como mencionó Bruce Ediger, se puede probar la función de agregar
ex
que comienza con ela
final con.
(punto), pero mi nuevo texto (código) contiene líneas que comienzan con un punto, que puede considerarse como el punto de sintaxis de adición. ¿Cómo puedo usarlo en esta situación?ex
'sdd
' número de líneas 'puede eliminar varias líneas, pero si tengo un bloque entre / marker1 / y / marker2 / con el número de líneas no fijo (variable) se debe reemplazar con un nuevo texto (código), cómo hacerlo eso ?
sed
o ex
comando funciona).
r
el comando leer archivo para copiar el texto de otro archivo, si la fuente del texto de reemplazo está en un archivo.