[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: grep und RegEx



Hallo,

Am Wed, 18 May 2005, Michelle Konzack schrieb:
[..]
>Nur wie man sieht ist am anfanfg die () noch mit nem TAG gefüllt und
>jetzt nicht mehr...
>
>Die Idee mit
>
>  __( '/home/michelle.konzack/bin/tdmailbody' )_________________________
> /
><snip>
>| if [ -f $LIST$1 ] ; then
>|   SUBJECT_ORIG=`cat $TMP_FILE | /usr/bin/formail -zx Subject:`
>|   TEST=`fgrep --quiet --ignore-case --file=$LIST$1 $TMP_FILE`
>          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[..]
>war zwar gut und schneller, aber da ich in den Logfiles den <TAG> haben
>will, muß wohl doch über 'cat' ... gehen:

Nein. Schau in meine andere Mail.

>  __( '/home/michelle.konzack/bin/tdmailbody.old' )_____________________
> /
><snip>
>| if [ -f $LIST$1 ] ; then
>|   SUBJECT_ORIG=`cat $TMP_FILE | /usr/bin/formail -zx Subject:`

Ist $TMP_FILE eine einzelne Mail?

>|   (cat $LIST$1; echo ) |
>    ^^^^^^^^^^^^^^^^^^^^^^
>|   while read VAL
>    ^^^^^^^^^^^^^^
>|   do
>|     if [ "$VAL" == "" ] ; then exit 1 ; fi
>|     TEST=`fgrep --ignore-case "$VAL" $TMP_FILE`
>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>|     if [ $? -eq 0 ] ; then
>|       if [ "$2" == "" ] ; then SUB="***SPAM_body***" ; else SUB=$2 ; f
>| i
>|       cat $TMP_FILE | formail -i "Subject: $SUB  $SUBJECT_ORIG" -i "X-
>| TDMailBody: $VAL"
>|       rm -f $TMP_FILE
>|       DATE=`date "+%Y-%m-%d %H:%M:%S"`
>|       echo "$DATE : ($VAL) $SUBJECT_ORIG" >>$LOGDIR/`date "+%Y-%m"`.lo
>| g
>|       exit 0
>|     fi
>|   done
>| fi
><snip>
> \______________________________________________________________________

Ich versuch's mal hiermit:

====
test -f "${LIST}${1}" || exit 1;  ## statt dem if .. fi

SUBJECT_ORIG="`/usr/bin/formail -zx 'Subject:' < \"$TMP_FILE\"`"

SUB="${2:-'***SPAM_body***'}";    ## SUB musst du nicht in der Schleife
                                  ## bei jedem pattern neu setzen
while read -r pattern; 
    test -n "$pattern" || exit 2; ## so erkennst du ggfs. warum sich
                                  ## das script beendet hat. evtl. 
                                  ## willst du aber auch nicht, dass
                                  ## das script sich bei der ersten
                                  ## Leerzeile beendet, dann nimm
                                  ## '|| continue' statt dem '|| exit 2'

    if grep -qiF "$pattern" "$TMP_FILE"; then   ## dich interessiert
                                  ## nur der Status, du verwendest
                                  ## "TEST" nicht weiter...

        formail -i "Subject: $SUB $SUBJECT_ORIG" \
                -i "X-TDMailBody: $pattern" \
            < "$TMP_FILE"

        rm -f "$TMP_FILE"
        echo "`date '+%Y-%m-%d %H:%M:%S'`: ($pattern) $SUBJECT_ORIG" \
            >> "${LOGDIR}/`date '+%Y-%m'`.log"
        exit 0
    fi
done < "${LIST}${1}"
====

====
cat "${LIST}${1}" | while read -r pattern; do
    ...
done
====

wuerde auch gehen, braucht halt unnoetigerweise das cat zusaetzlich.

BTW: wie erzeugst du $TMP_FILE? Ist das a) sicher, und b) noetig?

HTH & HAND,
-dnh

-- 
   283: whoami
          Whoami ist nur was für Leute mit Alzheimer! (Begründung von
          Microsoft Deutschland für das Entfernen des Befehls aus Windows
          NT)



Reply to: