ShellScript - suchen und ersetzten

Hallo Forum,

ich muss ein Script für den Copfilter modifizieren. Ein Shellscript ändert hier ein Pearlscript. Wieso das genau so läuft kann ich nicht wirklich nachvollziehen, soll aber auch nicht das Thema sein.

Aktuell sieht das Skript so aus:

 #############################
 #Server settings
 cp -p $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl.tmp.$$
 cat $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl |sed -e "s/^Server =.\*/Server =\> '${IMAP\_SERVER}:143',/" \
 -e "s/^User =.\*/User =\> '$IMAP\_USER',/" \
 -e "s/^Password =.\*/Password =\> '$IMAP\_PASS',/" \
 -e "s/^Debug =.\*/Debug =\> '$IMAP\_DEBUG2',/" \> $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl.tmp.$$
 mv $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl.tmp.$$ $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl
 echo "done server settings"

In der Zeile

-e "s/^User =.\*/User =\> '$IMAP\_USER',/" \

wird der Benutzer neu geschrieben/ersetzt. Das Ganze sieht dann im Pearl Script so aus:

my $imap = Mail::IMAPClient-\>new( 

Server =\> '192.168.2.55:143',
User =\> 'spam',
Password =\> 'Cleanmail06',
Debug =\> '0',

Timeout =\> '5',
Buffer =\> '65536',

);

Aber der Benutzername MUSS in doppelten Anführungsstrichen stehen. Nicht so wie hier in einfachen.

Wie kann ich also diese Zeile

-e "s/^User =.\*/User =\> '$IMAP\_USER',/" \

umschreiben dass dies

User =\> "spam",

dann rauskommt?

Danke, Chris

Hallo Chris,

ich muss ein Script für den Copfilter modifizieren.

Ersetze die Zeile

-e „s/^User =.*/User => ‚$IMAP_USER‘,/“

durch diese

-e "s/^User =.\*/User =\> \"$IMAP\_USER\",/

In meiner kleinen Simulation funktioniert das:

export IMAP\_USER=Marvin
echo User =.\* | sed -e "s/^User =.\*/User =\> \"$IMAP\_USER\",/"
User =\> "Marvin",

Viele Grüße
Marvin

Hi Marvin,

bei mir klappt das so nicht…

 #############################
 #Server settings
 cp -p $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl.tmp.$$
 cat $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl |sed -e "s/^Server =.\*/Server =\> '${IMAP\_SERVER}:143',/" \
 -e "s/^User =.\*/User =\> \"$IMAP\_USER\",/" \
 -e "s/^Password =.\*/Password =\> '$IMAP\_PASS',/" \
 -e "s/^Debug =.\*/Debug =\> '$IMAP\_DEBUG2',/" \> $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl.tmp.$$
 mv $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl.tmp.$$ $BASEDIR/opt/tools/bin/DMZS-sa-learn.pl
 echo "done server settings"

Das bekomme ich als Fehler:

sed: -e expression #2, char 32: Unknown option to `s'

Habt Ihr eine andere Idee?

Hallo Chris,

bei mir klappt das so nicht…

Was hast Du denn für Linux und welches sed? Ich habe mir jetzt von
http://www.dmzs.com/tools/files/spam.phtml
die Datei DMZS-sa-learn.pl besorgt und das ganze nochmal ausprobiert. Etwas angepasst so:

#!/bin/bash
DATEI=DMZS-sa-learn.pl
BASEDIR=/tmp

cat $DATEI | sed -e "s/^Server =.\*/Server =\> '${IMAP\_SERVER}:143',/" \
 -e "s/^User =.\*/User =\> \"$IMAP\_USER\",/" \
 -e "s/^Password =.\*/Password =\> '$IMAP\_PASS',/" \
 -e "s/^Debug =.\*/Debug =\> '$IMAP\_DEBUG2',/" \> $BASEDIR/$DATEI.tmp.$$
cat $BASEDIR/$DATEI.tmp.$$

und bekomme genau das gewünschte Ergebnis (hier nur der relevante obere Teil):

use Mail::IMAPClient;

my $debug=0;
my $salearn;

my $imap = Mail::IMAPClient-\>new(
Server =\> '192.168.2.55:143',
User =\> "spam",
Password =\> 'passwort',
Debug =\> '0',

if (!defined($imap)) { die "IMAP Login Failed"; }

Vielleicht hast Du dich auch nur etwas verschrieben?

Habt Ihr eine andere Idee?

Ja, ich habe noch eine andere Idee. Aber dazu schicke ich dir morgen abend eine Mail. Einfach deshalb, weil ich dazu etwas länger ausholen muss und eventuell einige Fragen der Diskussion bedürfen. Wenn es nach deiner Überprüfung eine funktionierende Lösung ist (wovon ich eigentlich überzeugt bin), kann es gern auch hier veröffentlicht werden. Eigentlich auch, wenn es wider Erwarten nicht funktioniert :wink: Da können dann auch andere dran feilen…

Viele Grüße
Marvin

Hi Marvin,

entschuldige bitte die verspätete Antwort. Es gab in den letzten Wochen leider wichtigeres.
Ich bin leider auch noch nicht wirklich dazu gekommen das zu testen was du mir geschickt hast, aber es hört sich vielversprechend an. Werde hoffentlich die kommenden Tage dazu kommen. Und lasse es dich dann natürlich wissen.

Gruss, Chris