Zeilen filtern

Dieses Thema im Forum "Programmieren allgemein" wurde erstellt von tiptel170, 20.07.2008.

  1. #1 tiptel170, 20.07.2008
    Zuletzt bearbeitet: 20.07.2008
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    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
    
    
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 21.07.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    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
     
  4. #3 tiptel170, 21.07.2008
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    Genau, das möchte ich machen, den inhalt <span class="title">$1</span>

    Gruss tiptel170
     
  5. #4 bytepool, 21.07.2008
    Zuletzt bearbeitet: 21.07.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    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
     
  6. #5 tiptel170, 21.07.2008
    Zuletzt bearbeitet: 21.07.2008
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    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
     
  7. #6 tiptel170, 22.07.2008
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    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 ;)
     
  8. #7 tiptel170, 23.07.2008
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    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
     
  9. #8 bytepool, 23.07.2008
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    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
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 tiptel170, 24.07.2008
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    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
     
  12. #10 tiptel170, 27.07.2008
    tiptel170

    tiptel170 Tripel-As

    Dabei seit:
    20.07.2008
    Beiträge:
    161
    Zustimmungen:
    0
    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
     
Thema:

Zeilen filtern

Die Seite wird geladen...

Zeilen filtern - Ähnliche Themen

  1. Datei filtern (mit mehreren Zeilen)

    Datei filtern (mit mehreren Zeilen): Hallo, ich würde mich sehr über eine Antwort freuen. Ich habe folgendes Problem: Datei xyz.log beinhaltet folgendes: execution status for...
  2. Daten (RS232 Text-Stream) anhand dreier Zeilenenden filtern

    Daten (RS232 Text-Stream) anhand dreier Zeilenenden filtern: Hallo Ein Bash-Problem: Ich schreibe Daten von der RS232 Schnittstelle mit - auf das sendende Gerät habe ich keinen Einfluss. Leider wird kein...
  3. 2 Zeilen aus einer txt auslesen

    2 Zeilen aus einer txt auslesen: Hallo Leute, ich habe eine Datei die immer aus zwei zusammenhängenden Zeilen besteht, als Beispiel: DE0006231004 # 15,04 Infineon DE0005785604...
  4. Zeichen an Zeilenanfang für bestimmten Zeilenbereich einfügen

    Zeichen an Zeilenanfang für bestimmten Zeilenbereich einfügen: Hallo, ich würde gerne in einem Textdokument, z.B. von Zeile 10 - 18, an den Zeilenanfang ein # einfügen. Habe mir schon diverse Seiten zu SED...
  5. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...