sed - ersetze Zeile nach Auftreten einer bestimmten Regex

22/09/2014 - 11:26 von Jakob Schürz | Report spam
Hi!

Ich hab immer wieder Probleme mit den SSL-Keys von Google, Gmx & Co. Ich
rufe für meinen internen Mailserver meine Mails von den div. Accounts
per fetchmail über ssl-gesicherte Verbindungen ab. Daher benötige ich
die aktuellen ssl-Keys. Die werden momentan offenbar relativ oft
geàndert...

Dazu hab ich ein nettes Skript gefunden, welches ich so noch modifiziert
habe, das es meine .fetchmailrc durchforstet, alle Mailserver samt deren
Ports rausfindet und dann die Zertifikate bzw. die Fingerprints abholt
und in der .fetchmailrc aktualisiert.

Das geschieht über einen Cronjob.

Das Problem ist aber, dass das nicht immer so 100%ig funktioniert und
dann stehe ich mit leeren sslfingerprint ""-Eintràgen in der
.fetchmailrc da, welche gar nicht mehr aktualisiert werden können, da
dieses Skript mit

sed -i "s/$OLDFINGERPRING/$NEWFINGERPRINT/" arbeitet.

Ich bin aber leider ḿit sed nicht ganz so vertraut, wie ich gerne
möchte. Und ich suche eine Möglichkeit, wie ich folgendes Szenario lösen
kann.

Ich bestimme $NEWFINGERPRINT für $MAILSERVER.
Meine .fetchmailrc sieht so aus

poll pop.gmail.com with
uidl
port 995
proto pop3
user USERA
password sehrgeheim
ssl
sslfingerprint ""
sslcertck
sslcertck sslcertpath /usr/share/ssl-cert
is UNIX_USER_LOCAL
nokeep

poll pop.gmail.com
uidl
port 995
proto pop3
user USERB
password nochgeheimer
ssl
sslfingerprint ""
sslcertck
sslcertck sslcertpath /usr/share/ssl-cert
is UNIX_USER_LOCAL

poll pop.gmx.net
uidl
proto pop3
bad-header accept
user USERC
password ichbingeheim
is UNIX_USER_LOCAL
ssl
sslfingerprint ""
sslcertck
sslcertck sslcertpath /usr/share/ssl-cert
nokeep

Ich habe z.B. bei gmail zwei Mailaccounts, einen bei gmx und dann noch 3
accounts bei einem 3. Mailprovider und noch einen Mailaccount. (Ist
historisch so gewachsen, dass ich verschiedene Mailaccounts habe, über
die ich heute alle noch Mails empfange...), welche alle auf den selben
lokalen Unix-Account zugestellt werden.

Ich muss jetzt (wie ihr seht sind beim letzten Aktualisieren die
sslfingerprints wieder einmal gelöscht worden... ) eine Möglichkeit
finden, wie ich nach JEDEM Auftreten eines Mailservers den aktuellen
sslfingerprint in die .fetchmailrc schreiben kann. Und zwar nur, wenn
dort schon eine Zeile mit sslfingerprint vorkommt...

Geht sowas mit sed überhaupt?

lg jakob

http://xundeenergie.at
http://karriere.xundeenergie.at
http://jakobusschuerz.vemmaeurope.com
wertstoffe@nurfuerspam.de
 

Lesen sie die antworten

#1 Herbert Pophal
22/09/2014 - 13:21 | Warnen spam
On 22.09.2014 11:26, Jakob Schürz wrote:
Hi!

Ich hab immer wieder Probleme mit den SSL-Keys von Google, Gmx & Co. Ich
rufe für meinen internen Mailserver meine Mails von den div. Accounts
per fetchmail über ssl-gesicherte Verbindungen ab. Daher benötige ich
die aktuellen ssl-Keys. Die werden momentan offenbar relativ oft
geàndert...

Dazu hab ich ein nettes Skript gefunden, welches ich so noch modifiziert
habe, das es meine .fetchmailrc durchforstet, alle Mailserver samt deren
Ports rausfindet und dann die Zertifikate bzw. die Fingerprints abholt
und in der .fetchmailrc aktualisiert.

Das geschieht über einen Cronjob.

Das Problem ist aber, dass das nicht immer so 100%ig funktioniert und
dann stehe ich mit leeren sslfingerprint ""-Eintràgen in der
.fetchmailrc da, welche gar nicht mehr aktualisiert werden können, da
dieses Skript mit

sed -i "s/$OLDFINGERPRING/$NEWFINGERPRINT/" arbeitet.



Einfach den qualifizierenden Text mit angeben:

sed -i 's/\(sslfingerprint\s*\)".*"/\1"'"$NEWFINGERPRINT"'"/'

und vorher testen ob $NEWFINGERPRINT nicht leer ist

finden, wie ich nach JEDEM Auftreten eines Mailservers den aktuellen
sslfingerprint in die .fetchmailrc schreiben kann. Und zwar nur, wenn
dort schon eine Zeile mit sslfingerprint vorkommt...

Geht sowas mit sed überhaupt?



s.o.


HTH
Herbert

Ähnliche fragen