GNU/Linux >> Tutoriales Linux >  >> Linux

¿Reemplazar rango de líneas con rango de líneas (sed u otros)?

Tengo dos archivos de texto:file1 y file2 , ambos con varias líneas.

$ cat file1
line one
line two
line three
line four
line five

$ cat file2
line A
line B
line C
line D
line E
line F

Me gustaría sustituir un rango de líneas de file1 (de la línea 1_start a la línea 1_end ) con un rango de líneas de file2 (de la línea 2_start a la línea 2_end ).

Por ejemplo, sustituya las líneas 2,4 en file1 con líneas 3,5 de file2 .

Lo que solo pude hacer hasta ahora es extraer las líneas necesarias de file2 con

$ sed -n 3,5p file2

Pero no ayuda ponerlos en file1 . ¿Es posible con sed? ? Si no, ¿es posible con una herramienta similar?

Respuesta aceptada:

sed puede imprimir un rango dado de líneas con algo como esto:

sed -n 'X,Yp' filename

Donde X es la primera línea en un rango y Y es la última línea, ambas inclusive. -n le dice a sed no imprimir nada a menos que se le indique explícitamente que lo haga y eso es lo que p seguir el rango lo hace.

Por lo tanto, puede llamar fácilmente a esto tres veces, agregarlo a un archivo temporal y luego mover ese archivo a donde desee. También puedes combinarlos todos usando cat y procese la sustitución como muestra este ejemplo (estoy usando números de línea que acabo de sacar de la nada; $ es la última línea de un archivo):

cat <(sed -n '1,5p' file1) <(sed -n '10,12p' file2) <(sed -n '9,$p' file1) > file1.tmp && mv file1.tmp file1

Aquí, estaríamos reemplazando las líneas 6, 7 y 8 en file1 con las líneas 10, 11 y 12 de file2 .

Actualización: Gracias a @MiniMax por señalar que cat y la sustitución del proceso se puede evitar haciendo lo siguiente:

{ sed -n '1,5p' file1; sed -n '10,12p' file2; sed -n '9,$p' file1; } > file1.tmp && mv file1.tmp file1

BESO, después de todo. 🙂


Linux
  1. ¿Insertar nuevas líneas con valores faltantes (na)?

  2. ¿Duplicar, con unos pequeños cambios, unas pocas líneas en un archivo de texto?

  3. ¿Cómo se reemplaza el texto similar a sed con python?

  4. Reemplazo de sed multilínea

  5. ¿Cómo reemplazar recursivamente los caracteres con sed?

Uso del comando sed de Linux con ejemplos

Tutorial de Unix Sed:anexar, insertar, reemplazar y contar líneas de archivos

sed - insertar línea después de X líneas después del partido

Encuentre y reemplace texto en un archivo entre un rango de líneas usando sed

Reemplace la dirección MAC con UUID

Reemplazo de SED en varias líneas