Zeile in einer Datei ersetzen / neu schreiben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Zeile in einer Datei ersetzen / neu schreiben

Beitrag von Quickly1971 » 28.07.2011 11:05:49

Hallo Zusammen.
Jetzt versuche ich mich mal mit absolutem Neuland.

Ich bastel immer mehr mit meinen Testservern rum. Nun möchte ich mir ein Script bauen was einige Werte (Zeilen) in einer Datei ersetzt um bei einer Neuinstallation mir die Arbeit zu erleichern (Nein, ich möchte nicht die ganze Datei erneuern :P ).

Beispiel-Datei: /etc/postfix/main.cf
Wert:

Code: Alles auswählen

message_size_limit = 1234567
soll ersetzt werden durch

Code: Alles auswählen

message_size_limit = 22480000
Kann mir jemand sagen wie ich das hin bekomme?

Ich habe gar keine Idee wo ich ansetzen soll.

Beispiel 2:
Beispiel-Datei: /etc/postfix/main.cf

Ich möche in Zeile 7 Eine leerzeile einfügen
Und in Zeile 8 dann folgenden Text einsetzen:

Code: Alles auswählen

Definiert die maximale Groesse einer ausgehenden Mail
Vielleicht hat ja auch jemand einen Link oder es gibt eine "Man"?!?!
Wie gesagt habe ich gar keine Ahnung wo ich ansetzen könnte.
Vielen Dank.
Quickly
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

uname
Beiträge: 12419
Registriert: 03.06.2008 09:33:02

Re: Zeile in einer Datei ersetzen / neu schreiben

Beitrag von uname » 28.07.2011 11:16:06

Für das erste Beispiel vielleicht so:

Code: Alles auswählen

sed -i 's/message_size_limit = 1234567/message_size_limit = 22480000/' /etc/postfix/main.cf
Die Option "-i" von "sed" sagt, dass direkt geändert werden soll. Naja wenn man sowieso so wie ich ein tägliches inkrementelles Backup hat ist die Gefahr eher gering. Aufpassen musst du im übrigen bei Sonderzeichen wie ^$* usw. Da "sed" reguläre Ausdrücke erwartet müsstest du die Werte escapen.

Insgesamt empfehle ich dir wenn du es regelmäßig durchführst das ganze in z.B. Shellprogrammierung oder Perl zu programmieren. Lerne somit Shellprogrammierung (lese Programme unter /etc/init.d) und Perl oder eine andere Scriptsprache.

Benutzeravatar
catdog2
Beiträge: 5352
Registriert: 24.06.2006 16:50:03
Lizenz eigener Beiträge: MIT Lizenz

Re: Zeile in einer Datei ersetzen / neu schreiben

Beitrag von catdog2 » 28.07.2011 11:20:28

Bei postfix gäbe es den Befehl postconf dafür.
http://www.postfix.org/postconf.1.html
Unix is user-friendly; it's just picky about who its friends are.

uname
Beiträge: 12419
Registriert: 03.06.2008 09:33:02

Re: Zeile in einer Datei ersetzen / neu schreiben

Beitrag von uname » 28.07.2011 11:30:18

Wenn es Programme gibt sollte man die auch nutzen. "postconf" ist wohl die bessere Wahl.

Falls du jedoch doch auf "sed" setzen willst und nicht den aktuellen Wert vor dem Austausch ermitteln willst kannst du natürlich auch stumpf egal bei welchen Eintrag den Wert ersetzen. Nutze einfach einen regulären Ausdruck wie folgenden:

Code: Alles auswählen

sed -i 's/message_size_limit = .*$/message_size_limit = 22480000/' /etc/postfix/main.cf 
. bedeutet beliebiges Zeichen, * bedeutet beliebig oft und $ ist das Ende der Zeile. Somit kann dort vorher alles gestanden haben.

Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Re: Zeile in einer Datei ersetzen / neu schreiben

Beitrag von Quickly1971 » 28.07.2011 12:12:46

Ok, THX!

Das Postfix war nur ein Beispiel. Es geht um diverse Dateien. Insofern würde mir "postconf" nicht weiter helfen.
Aber Ok, THX. Ich werde es gleich mal testen. :THX:

Kann mir noch jemand was zu dem zweiten Beispiel sagen?
Hier wären auch das einfügen von mehreren Zeilen relevant.

Quickly
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

Benutzeravatar
Livingston
Beiträge: 1816
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: Zeile in einer Datei ersetzen / neu schreiben

Beitrag von Livingston » 28.07.2011 12:19:23

Der heimliche Standard zum Erlernen von sed:
http://www.grymoire.com/Unix/Sed.html

Ich glaube, da musst Du Dich einfach mal durchkämpfen.

Antworten