PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AWD und Emailadresse auslesen



thewizard
04-06-2007, 13:42
Hallo,

bin gerade dabei ein Hylafax mit Samba drucken einzurichten.

Die Faxnummer bekommt er über folgendes Script raus :

cat /root/test.txt | ${AWK} '{ IGNORECASE=0 } /FAX-Nr ?: ?[0-9-]*/ \
{ $0=$0 "xxx"; \
gsub(/-/,""); \
anfang=match($0,/ ?: ?/); \
anfang=anfang+match(substr($0,anfang),/[0-9]/)-1; \
ende=match(substr($0,anfang),/[^0-9]/)-1; \
printf ("%s",substr($0,anfang,ende)) \
}'

Jetzt bräuchte ich das ganze auchnoch für eine Emailadresse:
Die Adresse taucht irgendwo im Text auf und sieht so aus E-Mail : test@test.de

cat /root/test.txt | ${AWK} '{ IGNORECASE=0} /e-Mail ?: ?*/ \
{ $0=$0 "xxx"; \
anfang=match($0,/ ?: ?/);\
printf ("%s",substr($0,anfang))}'

da bekomm ich dann : test@test.de blablablabla

wie kann ich denn den : und alles was nach der Emailadresse kommt abschneiden ??

Besten Dank

Sebastian

jan61
05-06-2007, 00:21
...
Jetzt bräuchte ich das ganze auchnoch für eine Emailadresse:
Die Adresse taucht irgendwo im Text auf und sieht so aus E-Mail : test@test.de

cat /root/test.txt | ${AWK} '{ IGNORECASE=0} /e-Mail ?: ?*/ \
{ $0=$0 "xxx"; \
anfang=match($0,/ ?: ?/);\
printf ("%s",substr($0,anfang))}'

da bekomm ich dann : test@test.de blablablabla

wie kann ich denn den : und alles was nach der Emailadresse kommt abschneiden ??

z. B. so:

jan@jack:~> echo "e-Mail : test@test.de blabla" | awk ' { print gensub(/.+: ?([^ ]+).*/, "\\1", 1); } '
test@test.de


Jan

thewizard
05-06-2007, 09:44
Hi,

danke für die schnelle Hilfe. Hab noch gawk installieren müssen sieht aber so weit gut aus - jedenfalls die Zeile von dir geht.

Was bei mir nicht klappt ist das ganze in einen Abwasch umzusetzten. Bekomme immer Syntax Errors SO müsste das Ding doch aussehen um eine Email Adresse aus einem Text rauszufiltern die so irgendwo im Text steht E-Mail : xx@xx.de ??


EMAIL=`${PS2ASCII} ${FAXFILE} | ${AWK} '{ IGNORECASE=1} /E-Mail ?: ?*/ \
{ $0=$0 "xxx"; \
anfang=match($0,/ ?: ?/); \
weiter=("%s",substr($0,anfang)); \
printf ("%s",gensub(weiter,/.+: ?([^ ]+).*/, "\\1", 1)) }' `


Danke

jan61
09-06-2007, 21:28
...
EMAIL=`${PS2ASCII} ${FAXFILE} | ${AWK} '{ IGNORECASE=1} /E-Mail ?: ?*/ \
{ $0=$0 "xxx"; \
anfang=match($0,/ ?: ?/); \
weiter=("%s",substr($0,anfang)); \
printf ("%s",gensub(weiter,/.+: ?([^ ]+).*/, "\\1", 1)) }' `


Um Himmels Willen! gensub erledigt doch schon alles für Dich, das ganze restliche Geraffel brauchst Du gar nicht - bis auf die Prüfung, ob die aktuelle Zeile das Muster überhaupt enthält:

jan@jack:~/tmp> m=$(echo -e "blablubb\ne-Mail : test@test.de blabla\nwrdlwrmpft" | awk ' /e-Mail ?: ?/ { print gensub(/.+: ?([^ ]+).*/, "\\1", 1); } ')
jan@jack:~/tmp> echo $m
test@test.de

Noch ein paar Anmerkungen zu Deinem awk-Code: '/E-Mail ?: ?*/' ist kein gültiges Pattern - * heisst: das vorherige Zeichen 0 ... n mal - da hast Du aber ein ?, also ein Sonderzeichen stehen. Die \ am Zeilenende sind innerhalb des awk unnötig. Statt 'printf "%s" ...' kannst Du bei einer Zuweisung an eine Variable auch gleich print benutzen, der Linefeed am Ende wird da eh weggeschnippelt. Und was soll 'weiter=("%s",substr($0,anfang))' bewirken???

Jan

thewizard
13-06-2007, 08:17
Hallo,

danke für die Hilfe. Mit der Zeile von dir haut es auch fast hin - wenn da nicht noch ein Problem wäre.

Also ich bekomme eine PS Datei von meinem Druckertreiber die schieb ich durch ps2ascii danach kommt eine Txtdatei raus die so aussieht


%%[ ProductName: ESP Ghostscript ]%%


FAX 13.06.2007 8:14 FAX-Nr : 12345 e-Mail : test@test.de teesttttttttttttttttttttttttteeeeeeeeeeeeeeeeessss ssssssssssssssssssstttttttttttttttt
%%[Page: 1]%%
%%[LastPage]%%

Das Problem ist er fängt bei den %%[PAGE: 1]%% eine neue Seite an und das Script von dir zeigt mir dann ein 1]%% an

mit diesem scipt bekomm ich die Faxnummer - das wollte ich umbauen damit ich auch die Email adresse bekomme, aber das hat ja nicht hingehauen.

FAXNUM=`${PS2ASCII} ${FAXFILE} | ${AWK} '{ IGNORECASE=1 } /FAX-Nr ?: ?[0-9-]*/ \
{ $0=$0 "xxx"; \
gsub(/-/,""); \
anfang=match($0,/ ?: ?/); \
anfang=anfang+match(substr($0,anfang),/[0-9]/)-1; \
ende=match(substr($0,anfang),/[^0-9]/)-1; \
printf ("%s",substr($0,anfang,ende)) \
}' `
Wenn mir da irgendjemand weiterhelfen könnte ?

Beste Grüße

Sebastian

jan61
16-06-2007, 22:17
...
Das Problem ist er fängt bei den %%[PAGE: 1]%% eine neue Seite an und das Script von dir zeigt mir dann ein 1]%% an
...

Das läuft bei mir einwandfrei. Das Suchmuster für die E-Mailadresse _kann_ gar nicht auf '%%[Page: 1]%%' anspringen, es sei denn, nach der Zeile mit der Mailadresse ist kein richtiger Zeilenumbruch vorhanden. Überzeug Dich mal mittels eines 'od -cx', was tatsächlich am Zeilenende steht.


jan@jack:~/tmp> cat tst.txt
%%[ ProductName: ESP Ghostscript ]%%


FAX 13.06.2007 8:14 FAX-Nr : 12345 e-Mail : test@test.de teesttttttttttttttttttttttttteeeeeeeeeeeeeeeeessss ssssssssssssssssssstttttttttttttttt
%%[Page: 1]%%
%%[LastPage]%%
jan@jack:~/tmp> awk ' /e-Mail ?: ?/ { print gensub(/.+: ?([^ ]+).*/, "\\1", 1); } ' tst.txt
test@test.de
Nebenbei: Auch die Fax-Nummer lässt sich so ähnlich rausziehen:

jan@jack:~/tmp> awk ' /FAX-Nr ?: ?/ { x=gensub(/.*FAX-Nr ?: ?([^ ]+).*/, "\\1", 1); gsub(/-/, "", x); print x; } ' tst.txt
12345
Jan

Nachtrag: Wenn nach der E-Mail-Adresszeile kein Zeilenumbruch vorhanden ist, dann machst Du die RegEx im gensub einfach etwas genauer:
jan@jack:~/tmp> awk ' /e-Mail ?: ?/ { print gensub(/.+e-Mail ?: ?([^ ]+).*/, "\\1", 1); } ' tst.txt
test@test.de
So funktioniert das hier selbst dann, wenn der ganze Dateiinhalt in einer Zeile steht.

thewizard
18-06-2007, 07:06
Tausend dank !!!

Es funktioniert bis jetzt einwandfrei

testserver:/tmp# cat sambafax.6578.ASCII | awk ' /e-Mail ?: ?/ { print gensub(/.+e-Mail ?: ?([^ ]+).*/, "\\1", 1); } '
test@test.de

testserver:/tmp# cat sambafax.6578.ASCII | awk ' /FAX-Nr ?: ?/ { x=gensub(/.*FAX-Nr ?: ?([^ ]+).*/, "\\1", 1); gsub(/-/, "", x); print x; } '
12345

testserver:/tmp# cat sambafax.6578.ASCII | awk ' /e-Mail ?: ?/ { print gensub(/.+: ?([^ ]+).*/, "\\1", 1); } '
1]%%


Nochmal vielen Dank

Sebastian

jan61
18-06-2007, 22:15
...
testserver:/tmp# cat sambafax.6578.ASCII | awk ' /e-Mail ?: ?/ { print gensub(/.+: ?([^ ]+).*/, "\\1", 1); } '
1]%%
...

Das nehme ich mal als Beweis, dass sambafax.6578.ASCII kein Unix-Zeilenende enthält. Hast Du Dir mal die Hex-Ausgabe der Datei angeschaut?

Jan