ubuntuusers.de

Textdateien mittels Shell Script bearbeiten

Status: Ungelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

dolfi56

(Themenstarter)

Anmeldungsdatum:
13. Mai 2014

Beiträge: 132

user unknown schrieb:

dolfi56 schrieb: alsch: ich bekomme dafür weder einen Schein noch verdiene ich daran was. und ich frage nur das nach, was ich selbst nicht weiß - wie du auch schon vorhere gesehen hast, probiere ich das alles selbst erst einmal durch und suche nach eienr Lösung.

Dann pardon. Sah mir nicht sehr nach eigenen Versuchen aus. Zu wenig Schilderung was versucht wurde und was genau nicht klappte. Und die Probleme zeigen unnötige, konkrete Komplexität, die aber nicht das Problem ist.

kann die Scripte auch gerne hier veröffentlichen, aber dann müsste ich ja noch eine Anleitung schreiben, wie das alles so bei mir selbst gedacht ist (momentan habe ich dafür sehr wenig Zeit). Und ob die Anleitung dann so richtig wäre, bezweifel ich, da ich nach Try and Error vorgehe 😲 Aber die Scripte veröffentliche ich dann hier, wenn alles funktioniert ...

Einsatz der Scripte: Postfix, Dovecat und Fetchmail für einen kleinen privaten IMAP-Server. Wo bei ich das angelehnt an diese Anleitung hier habe: http://mein.homelinux.com/wiki/mailserver/mailserver Hinzugefügt habe ich meine individuelle Ordnerstruktur (15-mailbox.conf) und in der Konfiguration von Postfix noch ein sender_dependent für den Relay Server, damit mehrere Postfächer unterstützt werden, und das auch beim Versand.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

kann die Scripte auch gerne hier veröffentlichen,

Nein, ich meine es umgekehrt. Beim Kommando

1
"s/'smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key'/'smtpd_tls_key_file=/etc/ssl/private/server.key'/g" /etc/postfix/main.cf

ist da der Inhalt der ganzen Zeile wichtig, oder reicht ein

1
"s/'aaa'/'bbb'/g" datei

nicht aus um das Problem zu schildern?

Der, der Dir helfen will, will seine Lösung vielleicht auch ausprobieren, da ist es schön ein knappes Beispiel zu haben, das man auch schnell nachtstellen kann mit einer ad-hoc-Datei usw.

dolfi56

(Themenstarter)

Anmeldungsdatum:
13. Mai 2014

Beiträge: 132

user unknown schrieb:

kann die Scripte auch gerne hier veröffentlichen,

Nein, ich meine es umgekehrt. Beim Kommando

1
"s/'smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key'/'smtpd_tls_key_file=/etc/ssl/private/server.key'/g" /etc/postfix/main.cf

ist da der Inhalt der ganzen Zeile wichtig, oder reicht ein

1
"s/'aaa'/'bbb'/g" datei

nicht aus um das Problem zu schildern?

Der, der Dir helfen will, will seine Lösung vielleicht auch ausprobieren, da ist es schön ein knappes Beispiel zu haben, das man auch schnell nachtstellen kann mit einer ad-hoc-Datei usw.

genau das Kürzen geht nicht ... in den Scripten wiederholt sich vieles und würde aktuell wohl den Umfang sprengen ... aber bald klappt es ...

sed -i "s/'smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key'/'smtpd_tls_key_file=/etc/ssl/private/server.key'/g" /etc/postfix/main.cf

Zum Testen sind die Beispiele zu lang, und zu kompliziert. Man muss erst entschlüsseln was die Frage überhaupt ist, ob Tippfehler drin sind.

sed -i "s/ssl-cert-snakeoil.key/server.key/" /etc/postfix/main.cf

Das einfache Anführungszeichen ist m.E. das Problem, es wird Teil des Suchausdrucks. Ob die Kürzung nicht zu weit geht, weil ssl-cert-snakeoil.key mehrfach auftaucht musst du wissen.

zum einem waren die vielen "" das Problem. Der Befehl darf immer nur

sed -i 's/SUCHBEGRIFF/ERSETZEN/' Pfad/zur/Datei

sonst kommt SED wohl durcheinander. Wenn man nun Dateipfade mit einem bspw. /home/nutzer in /home/nutzer2 ändern will, geht es wie folgt:

sed -i 's/\/home\/nutzer/\/home\/nutzer2/' Pfad/zur/Datei

also alle / im Dateipfad durch \/ ersetzen, wenn Leerzeichen vorkommen, muss nichts gemacht werden, vorausgesetzt der gesamte SED-Befehl ist in ' '

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

dolfi56 schrieb:

zum einem waren die vielen "" das Problem. ...

Wenn Du sauber "quotest" gemäß den Regeln, dann ist alles gut. Dann gehen auch die wildesten Kombinationen von Gänsefüßchen:

track@lucid:~$ echo "1'2\"3'\"4"
1'2"3'"4
track@lucid:~$ echo "1'2\"3'\"4"  |  sed "s/'\"/'''/"
1'2"3'''4 

Hier konkret: 'einfache' Gänsefüßchen gehen innerhalb der "doppelten" immer, "doppelte" innergalb von "doppelten" müssen einfach nur \"gequotet\" werden. (damit die Shell da nicht dran geht)

sonst kommt SED wohl durcheinander. Wenn man nun Dateipfade mit einem bspw. /home/nutzer in /home/nutzer2 ändern will, ...

Da gibt es eine viel einfachere Lösung: Du benutzt einfach irgend ein anderes Trennzeichen. Dann brauchst Du diese Escape-Orgie nicht:

sed -i 's|/home/nutzer|/home/nutzer2|'  Pfad/zur/Datei

LG,

track

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

dolfi56 schrieb:

Der, der Dir helfen will, will seine Lösung vielleicht auch ausprobieren, da ist es schön ein knappes Beispiel zu haben, das man auch schnell nachtstellen kann mit einer ad-hoc-Datei usw.

genau das Kürzen geht nicht ... in den Scripten wiederholt sich vieles und würde aktuell wohl den Umfang sprengen ... aber bald klappt es ...

Was heißt das "genau das Kürzen geht nicht"? Wieso soll das nicht gehen? Du sollst es kürzen und die Frage auf das wesentliche zuspitzen, dann müssen sich nicht 10 Leser die Arbeit machen, sondern ein Schreiber.

Du willst doch Hilfe haben.

zum einem waren die vielen "" das Problem. Der Befehl darf immer nur

sed -i 's/SUCHBEGRIFF/ERSETZEN/' Pfad/zur/Datei

sonst kommt SED wohl durcheinander.

Sed kommt sicher nicht durcheinander, sondern arbeitet nach einfachen Regeln. Du kommst vielleicht durcheinander.

Wenn man nun Dateipfade mit einem bspw. /home/nutzer in /home/nutzer2 ändern will, geht es wie folgt:

sed -i 's/\/home\/nutzer/\/home\/nutzer2/' Pfad/zur/Datei

also alle / im Dateipfad durch \/ ersetzen, wenn Leerzeichen vorkommen, muss nichts gemacht werden, vorausgesetzt der gesamte SED-Befehl ist in ' '

Das geht einfacher. Du nimmst ein Zeichen, das nicht in den Ausdrücken vorkommt, und benutzt dieses statt des Slashs:

1
sed -i 's#/home/nutzer#/home/nutzer2#' Pfad/zur/Datei
Antworten |