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

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

Ich möchte die Zeilen, die einem Muster aus einer Datei entsprechen, durch die Zeilen in der Reihenfolge aus einer anderen Datei ersetzen, zum Beispiel gegeben:

Datei1.txt :

aaaaaa
bbbbbb
!! 1234
!! 4567
ccccc
ddddd
!! 1111

Wir ersetzen gerne die Zeilen beginnend mit !! mit den Zeilen dieser Datei:

file2.txt :

first line
second line
third line

das Ergebnis sollte also sein:

aaaaaa
bbbbbb
first line
second line
ccccc
ddddd
third line

Akzeptierte Antwort:

Einfach geht das mit awk

awk '
    /^!!/{                    #for line stared with `!!`
        getline <"file2.txt"  #read 1 line from outer file into $0 
    }
    1                         #alias for `print $0`
    ' file1.txt

Andere Version

awk '
    NR == FNR{         #for lines in first file
        S[NR] = $0     #put line in array `S` with row number as index 
        next           #starts script from the beginning
    }
    /^!!/{             #for line stared with `!!`
        $0=S[++count]  #replace line by corresponded array element
    }
    1                  #alias for `print $0`
    ' file2.txt file1.txt

Linux
  1. Effizient die ersten paar Zeilen aus einer Textdatei entfernen?

  2. Nur die erste Zeile aus jeder Folge aufeinanderfolgender Zeilen beibehalten, die einem Muster entsprechen?

  3. Lesen von Zeilen aus einer Datei mit Bash:Für Vs. Während?

  4. Löschen bestimmter Zeilen aus einer Datei in der Linux-Befehlszeile

  5. Wie entferne ich die Zeilen, die in Datei B erscheinen, aus einer anderen Datei A?

So senden Sie eine E-Mail mit Dateianhang von der Befehlszeile aus

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

Zeilenbereich durch Zeilenbereich ersetzen (sed oder andere)?

Wie fügt man mehrere Zeilen an eine Datei an?

Mit ein paar kleinen Änderungen ein paar Zeilen in einer Textdatei duplizieren?

Wie ersetzt man sed wie Text durch Python?