Ergebnis von sed in Variable schreiben

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von panzaeron, 04.01.2007.

  1. #1 panzaeron, 04.01.2007
    panzaeron

    panzaeron Jungspund

    Dabei seit:
    22.09.2006
    Beiträge:
    19
    Zustimmungen:
    0
    Hallo,

    ich hab in einem Shellskript mal wieder ein Problem mit sed :(

    Aus einer Text-Datei möchte ich eine E-Mail-Adresse auslesen und in eine neue Variable zu schreiben. Die Zeile mit der E-Mail-Adresse hat folgenden Aufbau:
    (ein paar Tabs+Leerzeichen)Subject: (Text)/emailAddress=Test@Adresse.de

    Die Zeile mit der korrekten Adresse kann durch die Begriffe "Subject: " und "emailAddress=" in einer Zeile identifiziert werden.

    Daher habe ich folgendes Konstrukt gebaut:
    Code:
    EMAIL = `sed 's|Subject:\s.+/emailAddress=\(.+\)$|\1|' Dateiname`
    Leider wird immer die ganze Datei in die Variable geschrieben und ich finde den Fehler nicht :(

    Hat einer Idee, warum es so nicht funktioniert und was ich ändern muss?
     
  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. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Hallo panzaeron

    So spontan würd ich sagen, deine RegExp matcht nicht, dann gibt 'sed' nämlich einfach alles wieder aus. um das zu verhindern kannst du '-n' und 'p' verwenden. Siehe dazu 'man sed'.
    Code:
    sed -n 's|Subject:\s.*/emailAddress=\(.*\)$|\1|p' test
    
    Probiers mal so, das scheint zu matchen...

    Gruss
    d22
     
  4. #3 panzaeron, 04.01.2007
    panzaeron

    panzaeron Jungspund

    Dabei seit:
    22.09.2006
    Beiträge:
    19
    Zustimmungen:
    0
    Vielen dank dizzgo,
    leider greift auch diese RegEx nicht, immerhin wird jetzt nichts mehr ausgegeben.
    Allerdings weiß ich momentan nicht wieso die nicht greift, sieht eigentlich ganz logisch aus. Noch eine Idee?
     
  5. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Poste mal deine Input-Datei, oder einen Ausschnitt daraus.
     
  6. #5 panzaeron, 04.01.2007
    panzaeron

    panzaeron Jungspund

    Dabei seit:
    22.09.2006
    Beiträge:
    19
    Zustimmungen:
    0
    Gerne, hier also ein Beispiel für den Aufbau der Datei:
    Code:
    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 11 (0xb)
            Signature Algorithm: md5WithRSAEncryption
            Issuer: C=DE, ST=Niedersachsen, L=Stadt, O=Name/emailAddress=test@email1.de
            Validity
                Not Before: Jan  4 11:46:05 2007 GMT
                Not After : Jan  1 11:46:05 2017 GMT
            Subject: C=DE, ST=Niedersachsen, O=Organisation, CN=Vor- und Nachnahme/emailAddress=test@testmail.de
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                RSA Public Key: (1024 bit)
                    Modulus (1024 bit):
    ...
    Aus dieser Zeile möchte ich die E-Mail-Adresse test@testmail.de haben:
    Code:
    Subject: C=DE, ST=Niedersachsen, O=Organisation, CN=Vor- und Nachnahme/emailAddress=test@testmail.de
     
  7. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Kannst Du nicht grep statt sed benutzen?
     
  8. Giglio

    Giglio Doppel-As

    Dabei seit:
    21.12.2006
    Beiträge:
    140
    Zustimmungen:
    0
    Hi,

    wie wärs mal damit
    EMAIL = $(sed 's|Subject:\s.+/emailAddress=\(.+\)$|\1|' Dateiname)

    Mfg

    Sebi
     
  9. #8 Schlaubi_fi.de, 04.01.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Nein die Backticks sind nicht das Problem. Das Matching ist das Problem.
    Und eine Variablenzuweisung in der Bash a la

    var = abc

    funktioniert schon garnicht. Wenn dann schon so:

    var=abc

    @panzaeron
    Welche sed Version hast Du denn?
     
  10. #9 panzaeron, 04.01.2007
    panzaeron

    panzaeron Jungspund

    Dabei seit:
    22.09.2006
    Beiträge:
    19
    Zustimmungen:
    0
    @rikola
    Mit grep habe ich es auch schon versucht und zwar sowas:
    Code:
    EMAIL=`grep 'Subject:' Dateiname.txt|sed 's/emailAddress=\(.+\)/\1/'`
    Dann wird aber wieder die ganze Zeile ausgegeben bzw. bei Verwendung von -n und p nichts.

    @Schlaubi_fi.de
    Ich verwende einen Debian Sarge mit GNU sed Version 4.1.2
     
  11. #10 Peregrine, 04.01.2007
    Peregrine

    Peregrine Honorarkonsul

    Dabei seit:
    03.08.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ort:
    München, Bayern, Germany
    Dizzgo weißt auch da nichts zu, sondern gibt die Emailadresse via Backreferencing aus.
    Bei mir matched der so wie er soll... :think:
     
  12. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Dann picke Dir Zeile doch mit grep zu und veraendere sie dann mit sed. Dann brauchst Du auch kein '-n' und '/p' (was bei mir uebrigens auch nicht funktioniert hat, Debian etch, GNU sed 4.1.2)
     
  13. #12 panzaeron, 04.01.2007
    panzaeron

    panzaeron Jungspund

    Dabei seit:
    22.09.2006
    Beiträge:
    19
    Zustimmungen:
    0
    @rikola
    Die Idee ist gut, funktioniert aber auch nicht. Folgendes habe ich probiert:
    Code:
    EMAIL=$(grep 'Subject:' Dateiname|sed 's/.*emailAddress=//')
    Zurückgegeben wird wieder die ganze Zeile, sprich sed greift nicht. Aber warum? Eigentlich sollte doch alles bis zum Gleichheitszeichen gelöscht werden und dadurch die E-Mail-Adresse übrig bleiben?
     
  14. #13 Schlaubi_fi.de, 04.01.2007
    Zuletzt bearbeitet: 04.01.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Was ist Backreferencing? Zur Info ich meinte nicht Dizzgo, sondern panzaeron und Giglio!!

    Also ich denke so sollte es funktionieren!!

    Code:
    user@host:~> sed --version
    GNU sed Version 4.1.5
    Copyright (C) 2003 Free Software Foundation, Inc.
    (Der folgende Text ist eine nicht überprüfte Übersetzung, die zur
     Information dient;  in rechtlichen Fragen ist immer das englische
     Original ausschlaggebend)
    
    Dieses Program ist freie Software; In den Quelldateien können Sie die
    Bedingungen für die Weitergabe nachlesen.
    Es gibt KEINE GARANTIE; nicht einmal die implizite Garantie der
    MARKTFÄHIGKEIT oder der ERFÜLLUNG EINES BESTIMMTEN ZWECKES.
    
    
    user@host:~> cat <<-EOF | sed -n 's|.*Subject:.*/emailAddress=\(.+\)*|\1|p'
    Certificate:
         Data:
             Version: 3 (0x2)
             Serial Number: 11 (0xb)
             Signature Algorithm: md5WithRSAEncryption
             Issuer: C=DE, ST=Niedersachsen, L=Stadt, O=Name/emailAddress=test@email1.de
             Validity
                 Not Before: Jan  4 11:46:05 2007 GMT
                 Not After : Jan  1 11:46:05 2017 GMT
             Subject: C=DE, ST=Niedersachsen, O=Organisation, CN=Vor- und Nachnahme/emailAddress=test@testmail.de
             Subject Public Key Info:
                 Public Key Algorithm: rsaEncryption
                 RSA Public Key: (1024 bit)
                     Modulus (1024 bit):
    EOF
    
    Folglich muesste es lauten:

    Code:
    EMAIL="$(sed -n 's|.*Subject:.*/emailAddress=\(.+\)*|\1|p' dateiname)"
    
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 panzaeron, 04.01.2007
    panzaeron

    panzaeron Jungspund

    Dabei seit:
    22.09.2006
    Beiträge:
    19
    Zustimmungen:
    0
    @all
    Vielen Dank für eure Hilfe und besondere an Schlaubi_fi.de der letzte Tip funktioniert bei mir auch :)

    Nochmal vielen Dank, ein super Forum :)
     
  17. dizzgo

    dizzgo Lernbereite Riesenratte

    Dabei seit:
    04.08.2005
    Beiträge:
    573
    Zustimmungen:
    0
    Ort:
    /ch/sg///
    Phu, ist man mal 2h nicht im Forum, hat man schon die ganze Diskussion verpasst :D! Ist ja wieder mal schnell gegangen...

    Grüsse
     
Thema:

Ergebnis von sed in Variable schreiben

Die Seite wird geladen...

Ergebnis von sed in Variable schreiben - Ähnliche Themen

  1. mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern

    mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern: Hallo zusammen, es geht um folgenden Teil meiner .sh-Datei: NumberCheck=`mysql $SQL_ARGS "SELECT lkw, Firma FROM adb_group WHERE...
  2. Dateien in Unterordnern finden / Ergebnis in Variable speichern

    Dateien in Unterordnern finden / Ergebnis in Variable speichern: Hallo, ich bin noch ein totaler Newbie auf Unix, daher kenn ich mich noch nicht wirklich mit der Scriptsprache aus... Mein Problem: Ich...
  3. Ergebnisse der Eclipse-Umfrage 2013 veröffentlicht

    Ergebnisse der Eclipse-Umfrage 2013 veröffentlicht: Die Umfrage in der Gemeinschaft der Eclipse-Entwickler und Anwender 2013 konsolidiert die Trends der Vorjahre. Git ist weiter auf dem Vormarsch...
  4. Umfrage-Ergebnisse zu Systemd in Debian

    Umfrage-Ergebnisse zu Systemd in Debian: Beim Debian-Projekt wurde in der letzten Woche eine Umfrage zum Init-Daemon Systemd durchgeführt, die Ergebnisse sind jetzt verfügbar. Weiterlesen...
  5. Ergebnisse des Gnome Outreach Program for Women

    Ergebnisse des Gnome Outreach Program for Women: Während in den letzten sechs Jahren immer nur eine Studentin während Googles Summer of Code (GSoC) im Gnome-Projekt tätig war, waren es in diesem...