GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Zeilenbereich durch Zeilenbereich ersetzen (sed oder andere)?

Ich habe zwei Textdateien:file1 und file2 , beide mehrzeilig.

$ 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

Ich möchte einen Bereich ersetzen Zeilen von file1 (ab Zeile 1_start bis Zeile 1_end ) mit einem Bereich Zeilen von file2 (ab Zeile 2_start bis Zeile 2_end ).

Ersetzen Sie beispielsweise die Zeilen 2,4 in file1 mit Zeilen 3,5 aus file2 .

Was ich bisher nur tun konnte, ist, die benötigten Zeilen aus file2 zu extrahieren mit

$ sed -n 3,5p file2

Aber es hilft nicht, sie in file1 zu stecken . Geht das mit sed ? Wenn nicht, ist es mit einem ähnlichen Tool möglich?

Akzeptierte Antwort:

sed kann einen bestimmten Bereich von Zeilen mit etwas wie dem folgenden drucken:

sed -n 'X,Yp' filename

Wobei X erste Zeile in einem Bereich ist und Y ist die letzte Zeile, beide inklusive. -n sagt sed nichts zu drucken, es sei denn, es wird ausdrücklich dazu aufgefordert, und das ist der p nach dem Bereich tut.

Sie können dies also einfach dreimal aufrufen, an eine temporäre Datei anhängen und diese Datei dann an einen beliebigen Ort verschieben. Sie können sie auch alle mit cat kombinieren und verarbeiten Sie die Substitution, wie dieses Beispiel zeigt (ich verwende Zeilennummern, die ich gerade aus dem Nichts gezogen habe; $ ist die letzte Zeile in einer Datei):

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

Hier würden wir die Zeilen 6, 7 und 8 in file1 ersetzen mit den Zeilen 10, 11 und 12 aus file2 .

Aktualisierung: Danke an @MiniMax für den Hinweis auf diese cat und die Prozesssubstitution kann wie folgt vermieden werden:

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

Immerhin KISS. 🙂


Linux
  1. Bearbeiten von Text auf der Kommandozeile mit sed

  2. Kann Sed Zeilenumbrüche ersetzen?

  3. Neue Zeilen mit fehlenden Werten einfügen (na)?

  4. Ersetzen Sie eine Zeile durch einen anderen Inhalt mit Sed und Parallel für eine große Datei?

  5. Ersetzen Sie Linien, die einem Muster entsprechen, durch Linien aus einer anderen Datei in der richtigen Reihenfolge?

Verwendung des Linux-Befehls sed mit Beispielen

Unix Sed Tutorial:Dateizeilen anhängen, einfügen, ersetzen und zählen

sed Zeile mit Leerzeichen in eine bestimmte Zeile einfügen

sed - Zeile nach X Zeilen nach Übereinstimmung einfügen

Suchen und ersetzen Sie Text in einer Datei zwischen einem Zeilenbereich mit sed

Ersetzen Sie Zeilen in einer Datei durch Zeilen in einer anderen durch die Zeilennummer