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
...
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
...
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
...
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
...
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
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.