Zeilen filtern

T

tiptel170

Tripel-As
Hallo Leute,

ich bin neu hier. Habe auch nicht die grosse bash-programmierung. Aber vielleicht kann mir jemand weiter helfen. Mein problem ist:

Ich lasse eine rufnummer rückwärts suchen, wenn jemand anruft. Bin auch schon so weit, dass ich die dementsprechende zeile mittels grep aus dem web-code herausfiltern konnte und dann in eine datei-speichern.

Aber ich möchte nur den namen, ort und die telefon-nr. von dem teilnehmer herausfiltern und nicht den ganzen steuercode von der webseite.

Geht das überhaupt?

Anbei was ich gefiltert habe:

Code:
<a class="head" href="view.html?gid=TDUQGUYWSGG.S99N1O&sid=270asss9s9u1m4l7bfvhc3tbb6&redir=backwardssearch.html%3FnewSearch%3D1%26boxtype%3Dbackwards%26sid%3D270asss9s9u1m4l7bfvhc3tbb6%26vollstaenndig%3D07XXXXX&qid=107" title=""><span class="title">Sch&auml;fer  XXXX</span></a><!--  -->^

                                <span class="location">OsterXXXX Str. 14<br />7XXX XXX, XXX</span>
                                        <span class="mobile" lang="de" xml:lang="de">Tel.: </span> <em>(0 XXX) 4 28</em><br />

Das was jetzt hier mit den "X" dargestellt wird, soll als lesbarer text ausgegeben werden in einer text-datei.

Das problem ist: Die angaben änderen sich ständig, wenn jemand anruft.

Gruss tiptel170
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Vielleicht hilft dies weiter:

Code:
# Anzahl der Sekunden zwischen den Nachrichten
#WAIT=2

# Anzahl der Wiederholungen der Nachrichten
#LOOPS=3

# Aufrufparameter auswerten
ANGERUFENER=$3

#pfad zum cachefile
CACHE="/tmp/invsuche"

#pfad um das tempfile anzulegen  $1 IR $2 CallerID $3 CallDest
TMPFILE="/tmp/tmpsuche"
LOG="/var/log/invlog"

echo "Param1: $1 " >> $LOG
echo "Param2: $2 " >> $LOG
echo "Param3: $3 " >> $LOG
echo "Ort: "$"17 " >> $LOG
echo "----------------------------------" >> $LOG

NUMMER=`echo $2 | sed -e "s/\ //g" -e "s/+49/0/"`

# Win-POP-Nachrichten-Versand 130504
   $ISDN_POPUP "$MSG $CALLER. Eintrag zur TelefonNr.: $NUMMER  gefunden: $DETAILS"
   #   Beging des Gesrpäches: $CALLSTART. Gesprächsdauer: $CALLD sec. Herkunft: $DEST"

echo "Suche nach $NUMMER im cache"
title=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $2 }' $CACHE`
DETAILS=`awk  -F '\t' '{ if ($1 == "'$NUMMER'") print $3 }' $CACHE`
echo "Name: $NAME"
echo "Details: $DETAILS"
if [ "$NAME" == "" ]; then
    echo "Suche nach $NUMMER in www.klicktel.de"
             $LYNX "http://www.klicktel.de/inverssuche/backwardssearch.html?newSearch=1&boxtype=backwards&sid=270asss9s9u1m4l7bfvhc3tbb6&vollstaendig=$NUMMER" -cookies -dump -nolist -connect_timeout=30 -source | grep -e  "span class="\"title\"  -e "span class="\"location\" -e "Tel.:" -e  "Fax:" -e "span class="\"mobile\" > $TMPFILE

            if [ "$title" == "" ]; then
            if grep "Kein Teilnehmer gefunden" $TMPFILE > /dev/null; then
            NAME="Telefonnummer $NUMMER"
    DETAILS="Kein Eintrag $NUMMER"
            fi;

fi;

if [ "$title" == "" ]; then
NAME="Eintrag gefunden zur $NUMMER"
DETAILS="Fehler $NUMMER"
else
echo -e "$NUMMER\t$NAME\t$DETAILS" >> $CACHE
fi;
echo "Name: $NAME"
echo "Details: $DETAILS"

fi
 
Zuletzt bearbeitet:
Hi,

also wenn ich dich richtig verstanden habe, moechtest du jeweils die Teile die hierunter mit $1, $2, und $3 gekennzeichnet sind, ja?
Code:
<span class="title">$1</span>
<span class="location">$2</span>
<span class="mobile" lang="de" xml:lang="de">Tel.: </span> <em>$3</em>
Falls das der Fall sein sollte, laesst sich das relativ leicht mit regulaeren Ausdruecken und sed loesen. Schau dir einfach mal die manpage von sed, bzw. ein paar Beispiele im Netz zu sed, an.
Falls du das nicht meintest, solltest du nochmal versuchen genauer zu erklaeren was du exakt haben willst, welcher Teil immer gleich bleibt, und welcher Teil sich immer veraendert.

Ich habe mir dein Skript jetzt auch nicht naeher angeschaut, aber es wuerde helfen, wenn du wenigstens die if Abfragen und so vernuenftig einruecken wuerdest.

Achja, und ich denke dass das Thema eigentlich mehr ins Shell-Skripte Forum gehoert.

mfg,
bytepool
 
Hi,

also wenn ich dich richtig verstanden habe, moechtest du jeweils die Teile die hierunter mit $1, $2, und $3 gekennzeichnet sind, ja?
Code:
<span class="title">$1</span>
<span class="location">$2</span>
<span class="mobile" lang="de" xml:lang="de">Tel.: </span> <em>$3</em>
Falls das der Fall sein sollte, laesst sich das relativ leicht mit regulaeren Ausdruecken und sed loesen. ....
mfg,
bytepool

Genau, das möchte ich machen, den inhalt <span class="title">$1</span>

Gruss tiptel170
 
Hi,

wie gesagt,sollte doch mit sed recht leicht sein, so in etwa:

Code:
title=$(echo '<span class="title">my title</span>' | sed 's/<span class="title">\([A-Za-z0-9 ]*\)<.*/\1/')
oder
tel=$(echo '<span class="mobile" lang="de" xml:lang="de">Tel.: </span> <em>my tel nr</em>' | sed 's/<span class="mobile".*<em>\([A-Za-z0-9 ]*\)<.*/\1/')

Du musst sed natuerlich entsprechend fuettern.

mfg,
bytepool
 
Zuletzt bearbeitet:
Habe den befehl direk eingegeben:
sed 's/<span class="title">\([A-Za-z0-9 ]*\)<.*/\1/'

und das ergebnis war: es wurde mir wieder alles aufgelistet.

Das mit dem echo, da bin ich noch nicht dahintergestiegen.

Gruss tiptel170
 
Zuletzt bearbeitet:
Habe den befehl direk eingegeben:
sed 's/<span class="title">\([A-Za-z0-9 ]*\)<.*/\1/'

und das ergebnis war: es wurde mir wieder alles aufgelistet.

Das mit dem echo, da bin ich noch nicht dahintergestiegen.

Gruss tiptel170

Ich habe was gefunden: 1. Die original datei beim auslesen der html-seite muss ich auch als .html abspeichern sonst erkennt sed nicht den inhalt als html.

2. Habe einen einzeiler gefunden, der mir dies als txt abspeichert.

Geht so: sed -e 's/<[^>]*>//g' /tmp/tmpsuche.html > /tmp/test.html

Wie bekomme ich das mit den sonderzeichen hin? Ä Ö Ü... ich möchte dies als Winmessages über das lokale netzwerk verschicken, lesbar.

So sieht dies jetzt aus:
Code:
 Sch&auml;fer  XXXXX
                                XXXXXXXXX Str. 1474XXX Sch&ouml;ntal, XXXX
                                        Tel.:  (0 7Y XX) X XX

XXX = Gebe ich nicht bekannt... ;) Das &auml; = ä
Bei Str. 1474XXX Dort sollte eine lücke sein. Sonst wäre die PLZ 7-stellig.

Gruss tiptel170 und danke mit dem tip sed ;)
 
Hallo bytepool,

ich stehe vor einem problem: Mit sed

ich möchte in der datei <br /> ersetzten durch <br /><p> . Habe mit sed einiges ausprobiert, aber ich komme nicht weiter:

Hier mein sed-befehl:
Code:
sed -e 's/\ \/\>/\<p\>/g' tmpsuche.html >tmpsuche1.html

leider verändert sich in der datei tmpsuche1.html nichts, bleibt gleich gross.

Gruss tiptel170
 
Hi,

in so einem Fall wo du viel mit slashes und backslashes arbeiten musst, wuerde ich mir zu nutzen machen, dass du als Trennzeichen fuer sed fast alles benutzen kannst:
Code:
echo "<br />" | sed -e 's$ />$ /><p>$g'
Hier wird also statt des slashes das Dollarzeichen als Trennzeichen benutzt, was das ganze einiges lesbarer macht.

mfg,
bytepool
 
Gut danke, wie bekomme ich nur diese Zeile formatiert:

Jetzt: <em>(0 7x xx) x 28</em><br />

In: <em>(07xxx x28</em><br />

Anderes Beispiel mit längerer Nummer:

<em>(0 69) 9 0x xx xx x</em><br />

Denn die Länge der Vorwahl ändert sich und auch die Länge von der Rufnummer ändert sich auch. Den rest <em> </em><br /> den kann ich schon herauslöschen, das funktioniert auch.

Wie bekomme ich die Steuerzeichen weg mit ^ und schwarz Hinterlegt (so sehe ich dies im mc)?

Gruss tiptel170
 
So ich habe es hinbekommen:

Code:
#!/bin/sh
# /usr/bin/isdn.ring
# ISDN-Configuration: /etc/isdn/callerid.conf
# Gernerierung eines Nachrichten-Versand in Windwos-Netzwerken.
# Mit Rückwärtssuche bei klicktel.de und speicherung als txt-Datei
# Version 0.0.5
# Datum: 23.07.2008
# (c) by Markus Sch.fer
# Verbesserungen und Anregungen an: Markus.F.Schaefer@t-online.de
# Eine Freie und komerzielle Verbreitung ist erw.nscht.

MSNAME="${1}"
CALLER="${2}"
CALLID="${3}"
CALLSTART="${4}"
CALLD="${5}"
CALLSTOP="${6}"
TAX="${12}"
DEST="${17}"
ISDN_POPUP="/usr/bin/isdn_popup"
MSG="Neuer Anruf Eingegangen von"
LYNX="/usr/local/bin/lynx"
HTMLTMP="/tmp/tmp.html"
CONF="/etc/html2txt.sed"
CONF1="/etc/html2txt_smb.sed"
TXTTMP="/tmp/tmp.txt"
TXTTMP_SMB="/tmp/tmp_smb.txt"
TXTTMP1="/tmp/tmp1.txt"
TXTTMP2="/tmp/tmp2.txt"
ADDRESS="/tmp/address.html"
TELEFON="/tmp/tel.html"
TELEFON1="/tmp/tel1.html"
FAXER="/tmp/fax.html"
FAXER1="/tmp/fax1.html"
CELLPH="/tmp/mobil.html"
TITEL="span class="\"title\"
LOCATION="span class="\"location\"
TEL="Tel.:"
FAX="Fax:"
MOBILE="span class"\"mobile\"
HOME="http://www.klicktel.de"
INVERS="$HOME/inverssuche/backwardssearch.html?newSearch=1&boxtype=backwards&sid=270asss9s9u1m4l7bfvhc3tbb6&vollstaendig="
PARAM="-cookies -dump -nolist -connect_timeout=3 -source"
VORWAHL="7943"
SMBMSG="/tmp/smbmsg.txt"
DATE="/tmp/date.txt"
TMPFILE="/tmp/tmpsuche.html"
TMPFILE1="/tmp/tmpsuche1.html"
LOG="/var/log/invlog"

rm $SMBMSG
rm $DATE

#Ermitteln des Datums und der Uhrzeit
date > $DATE

# +49-Ersetzug duch 0 für die Suche im Internet
NUMMER=`echo $2 | sed -e "s/\ //g" -e "s/+49/0/"`
ZNR=`echo $3 | sed -e "s/\ //g" -e "s/+49$VORWAHL/Intern/"`

# Rufnummern-Ermittlung über das Internet
echo "Suche nach $NUMMER in $HOME"

    #Achtung! lynx vorher Herunterladen aus dem Internet und installieren!
    $LYNX "$INVERS=$NUMMER" $PARAM |grep -e  "$TITEL"  -e "$LOCATION" -e "$TEL" -e  "$FAX" -e "$MOBILE" > $TMPFILE

    # Adresse Zeile herausfiltern und in Datei speichern
    grep  $TMPFILE -e "$TITEL" -e "$LOCATION" >$ADDRESS

    #Einfügen eines Zeilenumbruches zwischen HausNr. und der PLZ und ersetzten der zweiten Klammer durch Leerschritt - Leerschritt
    sed 's$ />$ /> \n $' $ADDRESS >$TMPFILE1

#Sektion Telefon-Nr.

    # Die Telefonnummer heruasfiltern Leerzeichen löschen und neu setzten
    touch $TELEFON
    grep $TMPFILE -e "$TEL" >$TELEFON | tr -d ' ' < $TELEFON > $TELEFON1
    cp $TELEFON1 $TELEFON

    # Trennung zwischen der Fax-Nr und der Rufnummer
    sed 's/\Fax/\ Fax/g' $TELEFON >$TELEFON1
    cp $TELEFON1 $TELEFON

    # Loeschen der Rufnummer
    # Erstellen eines Zeilen-Umbruches
    tr ' ' '\012' < $TELEFON > $TELEFON1
    cp $TELEFON1 $TELEFON

    # Erstellen der Telefon-Nummer
    grep $TELEFON -e "Tel." >$TELEFON1
    cp $TELEFON1 $TELEFON

    #Die Klammer entfernen vor der Vorwahl und Leerzeichen zwischen Vorwahl und Rufnummer setzten
sed 's/)/\ /; s/:/\ /g' $TELEFON >$TELEFON1
    cp $TELEFON1 $TELEFON
    tr -d -s '(' '(' < $TELEFON > $TELEFON1

    # Einfuegen der Telefon-Nr in die $TMPFILE1
    tail $TELEFON1 >> $TMPFILE1
    rm $TELEFON1 $TELEFON

#Sektion Fax-Nr.

    # Die Fax-Nummer heruasfiltern Leerzeichen löschen und neu setzten
    touch $FAXER
    grep $TMPFILE -e "$FAX" >$FAXER | tr -d ' ' < $FAXER > $FAXER1
    cp $FAXER1 $FAXER

    # Trennung zwischen der Fax-Nr und der Rufnummer
    sed 's/\Fax/\ Fax/g' $FAXER >$FAXER1
    cp $FAXER1 $FAXER

    # Loeschen der Rufnummer
    # Erstellen eines Zeilen-Umbruches
    tr ' ' '\012' < $FAXER > $FAXER1
    cp $FAXER1 $FAXER

    # Leerzeichen vor Fax setzten
    sed 's/\Fax/\ Fax/g' $FAXER >$FAXER1
    cp $FAXER1 $FAXER

    # Erstellen der Fax-Nummer
    grep $FAXER -e "Fax" >$FAXER1
    cp $FAXER1 $FAXER

    #Die Klammer entfernen vor der Vorwahl und Leerzeichen zwischen Vorwahl und Rufnummer setzten
    sed 's/)/\ /; s/:/\ \ /g' $FAXER >$FAXER1
    cp $FAXER1 $FAXER
    tr -d -s '(' '(' < $FAXER > $FAXER1

    # Einfuegen der Fax-Nr in die $TMPFILE1
    tail $FAXER1 >> $TMPFILE1
    rm $FAXER1 $FAXER

    #Umwandlung von html in text
    sed -e 's/<[^>]*>//g' $TMPFILE1 > $HTMLTMP

    #Umwandlung der Sonderzeichen
    sed -n -f $CONF $HTMLTMP > $TXTTMP

    #Die Zeilen einrücken lassen
    tr -s [:blank:] ' '  < $TXTTMP > $TXTTMP1
# Protokolldatei erstellen
echo "Datum u. Uhrzeit:" >> $LOG
tail $DATE               >> $LOG
echo "Art:      $1 "     >> $LOG
echo "Herkunft: $NUMMER ">> $LOG
echo "Ziel:     $ZNR"    >> $LOG
echo "Adresse:"          >> $LOG
tail $TXTTMP1            >> $LOG
echo "----------------------------------" >> $LOG

# Umwandlung der Sonderzeichen für den Winmessager
sed -n -f $CONF1 $HTMLTMP > $TXTTMP_SMB
tr -s [:blank:] ' '  < $TXTTMP_SMB > $TXTTMP2

#Text für den "Winmessager"
tail $DATE                                                       >> $SMBMSG
echo "--------------------------------------------------------"  >> $SMBMSG
echo "$MSG $NUMMER. Eintrag zur TelefonNr.: $NUMMER  gefunden:"  >> $SMBMSG
echo "--------------------------------------------------------"  >> $SMBMSG
tail $TXTTMP2                                                    >> $SMBMSG

$ISDN_POPUP $SMBMSG

Soweit funktioniert dies auch ganz gut. Wer verbesserungs-vorschäge hat, dafür bin ich offen.

In der zeile:
Code:
# +49-Ersetzug duch 0 für die Suche im Internet
NUMMER=`echo $2 | sed -e "s/\ //g" -e "s/+49/0/"`

Soll folgende bedienung gelten:

Alle ländervorwahl ausser +49 soll ersetzt werden durch 00. Wie kann ich dies realisieren?

Eine weiter anforderung stelle ich noch: Ich habe eine postgressql-datenbank laufen.
Wie kann ich dies importieren, aber mit dem vergleich in einem "chach-Speicher", bevor es in die SQL-datenbank eingetragen wird. Soll doppeleinträge verhindern.

Die daten werden im folgeden format abgespeichert:
Code:
 Schxxxx Markus^
 XXXXXXXX Str. X4
 7XXX XXXXX, Jagst^
 Tel. 07XXX XXX^

Die Tabelle von SQL sieht so aus:

Code:
id name department_1 department_2 street zipcode city country contact phone fax homepage email notes discount taxincluded creditlimit terms customernumber cc bcc business_id taxnumber sic_code account_number bank_code bank language datevexport 	ime mtime obsolete username user_password salesman_id c_vendor_id klass language_id payment_id taxzone_id greeting import owener employee sw branche grafik 	sonder lead leadsrc bland ustid

Vielleicht hat jemand eine idee?

Bin froh, dass ich soweit gekommen bin. Erstmal danke an die unterstüzung.

Gruss tiptel170
 

Ähnliche Themen

NAS-Drive Mount in Bash-Script über crontab

script sshpass

Verschlüsseltes Backup-Script mit rsync

HandbrakeCLI Shell Skript

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Zurück
Oben