GNU/Linux >> Linux Esercitazione >  >> Linux

Sostituire Intervallo di linee con Intervallo di linee (sed o altro)?

Ho due file di testo:file1 e file2 , entrambi con più righe.

$ 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

Vorrei sostituire un intervallo di righe di file1 (dalla riga 1_start alla riga 1_end ) con un intervallo di righe di file2 (dalla riga 2_start alla riga 2_end ).

Ad esempio, sostituisci le righe 2,4 in file1 con righe 3,5 da file2 .

Quello che ho potuto fare solo fino ad ora è estrarre le righe necessarie da file2 con

$ sed -n 3,5p file2

Ma non aiuta inserirli in file1 . È possibile con sed ? In caso negativo, è possibile con uno strumento simile?

Risposta accettata:

sed può stampare un determinato intervallo di righe con qualcosa del genere:

sed -n 'X,Yp' filename

Dove X è la prima riga in un intervallo e Y è l'ultima riga, entrambe incluse. -n dice a sed non stampare nulla a meno che non venga esplicitamente detto di farlo ed è ciò che il p segue l'intervallo.

Quindi puoi facilmente chiamarlo tre volte, aggiungendo un file temporaneo, quindi sposta quel file dove vuoi. Puoi anche combinarli tutti usando cat ed elaborare la sostituzione come mostra questo esempio (sto usando numeri di riga che ho appena tirato fuori dal nulla; $ è l'ultima riga di un file):

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

Qui sostituiremmo le righe 6, 7 e 8 in file1 con le righe 10, 11 e 12 da file2 .

Aggiornamento: Grazie a @MiniMax per aver segnalato quel cat e la sostituzione del processo può essere evitata procedendo come segue:

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

BACIO, dopotutto. 🙂


Linux
  1. Come sostituire il testo come sed con python?

  2. Sostituisci una parola con un'altra in bash

  3. grep corrisponde solo alle righe in un intervallo specificato

  4. sed inserisce una riga con spazi in una riga specifica

  5. Trova e sostituisci il testo in un file tra un intervallo di righe usando sed

Sostituire una riga con un altro contenuto utilizzando Sed e Parallel per un file di grandi dimensioni?

Sostituire le righe che corrispondono a un motivo con le righe di un altro file in ordine?

Duplicato, con poche piccole modifiche, poche righe in un file di testo?

Utilizzo del comando Linux sed con esempi

Tutorial Unix Sed:aggiungi, inserisci, sostituisci e conta righe di file

Sostituzione SED su più righe