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

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

Ich habe eine große Datei (50 GB) und möchte die Zeilen beginnend mit dem Inhalt der Variablen $i ersetzen mit dem Inhalt der Variablen $newline mit parallel Befehl.

Mein Skript ist unten angegeben

#!/bin/sh 
File="test.txt"
i="foo"
newline="helooooooo"

parallel -a $File -k --block 30M --pipe-part 'sed -i /^$i/d' $File
echo $newline >> $File 

Es funktioniert bei mir nicht, nur die Zeile zu löschen.

Akzeptierte Antwort:

Ich denke, Ihr Problem ist hier:

'sed -i /^$i/d'

Versuchen Sie Folgendes:

"sed -i /^$i/d"

Die Variable $i kann nicht erweitert werden, da es in einfache Anführungszeichen eingeschlossen ist. Wenn Sie diese in doppelte Anführungszeichen umwandeln, kann Bash sie mit Ihrer Variablen $i erweitern .


Linux
  1. Zeilenbereich durch Zeilenbereich ersetzen (sed oder andere)?

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

  3. Dateiinhalt kodieren und als eine Zeile wiedergeben?

  4. Suchen und durch sed in Verzeichnis und Unterverzeichnissen ersetzen

  5. Wie verwendet man sed, um die Variable einer Konfigurationsdatei zu ersetzen?

Bearbeiten von Text mit sed und grep

Unix Sed Tutorial:Drucken von Dateizeilen mit Adresse und Mustern

Unix Sed Tutorial:Suchen und Ersetzen von Text in einer Datei mit RegEx

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

So verwenden Sie Sed zum Suchen und Ersetzen einer Zeichenfolge in einer Datei

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