Thread Ersetzen von Zeilen mit Strings und Zahlen in längerem File (21 answers)
Opened by Erin at 2012-08-01 17:03

Linuxer
 2012-08-01 17:24
#160445 #160445
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Ich denke, das Hauptproblem besteht darin, dass Deine Texte aus mehreren Zeilen bestehen und die Dateien standardmäßig zeilenweise gelesen werden.
In der Hoffnung, dass die Daten-Dateien nicht zu groß sind, könnte man sie komplett einlesen und dann die Ersetzung machen.

Beispiel:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Kommando zum Ersetzen ($ Am Anfang ist der Systemprompt)
$ perl -i.bak -p -e 'BEGIN { $/=undef; $search = "abc\nabc\nabc"; $replace = "123\n123\n123"; } s/$search/$replace/msg;' data.txt
# Kontrolle ob Ersetzung geklappt hat
$ cat data.txt
123
123
123
def
# Kontrolle der alten Daten
$ cat data.txt.bak
abc
abc
abc
def


edit: Erklärungen:

-i.bak führe Dateien in der Datendatei aus; lege aber vorher eine Sicherung mit Endung .bak an
-p führe den Code als Schleife über die (i.d.R. zeilenweise) gelesenen Daten aus und gebe jeweils die Zeile wieder aus
-e hier folgt der Code

BEGIN { $/=undef; $search = "abc\nabc\nabc"; $replace = "123\n123\n123"; }
Damit werden zu Beginn, noch vor der gewünschten Verarbeitung als Schleife einige Variable (neu) gesetzt
$/=undef; damit wird veranlasst, dass die Datei am Stück komplett gelesen wird (man hat dann quasi nur einen Schleifendurchlauf)
$search = "abc\nabc\nabc"; wonach soll gesucht werden (dreizeiliger String)
$replace = "123\n123\n123"; womit soll ersetzt werden (dreizeiliger String)

s/$search/$replace/msg; Der Code, der pro Schleifendurchlauf ausgeführt wird
data.txt Die Datendatei, die verarbeitet wird

edit2: überflüssiges Newline am Ende von $search & $replace entfernt


edit3: PS: Der hier gezeigte Ansatz ist kein Skript, sondern ein Kommando, das auf der Kommandozeile, bzw. Shell aufgerufen wird.
Last edited: 2012-08-01 17:34:24 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Ersetzen von Zeilen mit Strings und Zahlen in längerem File