[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: sed - Problem



Hallo,

Am Thu, 01 Sep 2005, Sven Gehr schrieb:
>Am Mi 31.08.2005 15:27 schrieb Frank Küster <frank@debian.org>:
>> Michelle Konzack <linux4michelle@freenet.de> wrote:
>> > Am 2005-08-31 12:55:18, schrieb Sven Gehr:
[..]
>also alles perfekt. Nun muß ich die zwei Schritte zu einem
>zusammenfassen und habe folgendes Skript erstellt:
>
>#!/bin/sh
>PS2ASCII=/usr/bin/ps2ascii
>FAXFILE=/usr/lib/cups/backend/out.ps
>FAXNUM=`($PS2ASCII $FAXFILE)|sed -e 's/^*\@#//' -e 's/\#@.*$//' -e 's/
         ^                  ^ die subshell ist ueberfluessig.
>//g' -e 's/^+49/0/' -e 's/^+/00/' -e 's/\///g' -e 's/-//g'`
>echo $FAXNUM
>
>wenn ich dieses nun auf die gleiche Ausgangs-Datei (out.ps) anwende
>erhalte ich als Ausgabe:
>
>%%[ProductName:ESPGhostscript]%% @#06214829391 ................
>%%[Page:1]%% %%[LastPage]%%
>
>Ich finde absolut keinen Fehler. als kleiner Hinweis, dieses PS-File
>wurde von einem Windows-Druckertreiber erzeugt.

AHA!

Les bitte meine anderen Antworten (speziell die in suse-linux).

FAXNUM="`${PS2ASCII} \"$FAXFILE\" | tr '\r' '\n' | \
    sed 's/^@@ *+/00/;s/[^0-9]\+//g;'`"

Das sollte so eigentlich funktionieren -- kann aber sein, dass das
mit dem Zeilenende ersetzen nicht gleich korrekt funktioniert, und
dass dann die Verankerung der '@@' nicht funktioniert. Achso, du
verwendest ja inzwichen @# und #@ (ueberfluessigerweise). Also ggfs.
mal folgendes testen:

FAXNUM="`${PS2ASCII} \"$FAXFILE\" | tr '\r' '\n' | \
    sed 's/@# *+/00/;s/[^0-9]\+//g;'`"

Falls das zuviel erwischt, schau dir meine anderen Mails nochmal
genauer an. Spontan mit deinen geaenderten Anforderungen wuerde ich
auch noch folgendes probieren (ungetestet!):

FAXNUM="`${PS2ASCII} \"$FAXFILE\" | tr '\r' '\n' | \
    sed '/@#.*#@/ {
            s/.*\(@#.*#@\).*/\1/;
            s/^@# *+/00/;
            s/[^0-9]\+//g;
        }'`"

Hm. Wie sieht das PS denn konkret aus? Kannst du da mal ein Beispiel der
relevanten Stelle mailen? Ich denke, das PS2ASCII ist ueberfluessig und
die Nummer laesst sich direkt aus dem PS rauslesen.

BTW: awk waere speziell dann ueberlegenswert (ungetestet!):

FAXNUM="`awk '
BEGIN {
    RS="[\r\n]"; ## nimmt \r und \n und \r\n als Zeileumbruch, aber
                 ## ungetestet, ersetzt also das 'tr'.
}
/@#.*#@/ {
    $0 = gensub(/.*@#(.*)#@.*/, "\\1", 0);
    sub(/^ *\+ */, "00", $0);
    print gensub(/[^0-9]/, "", "g");
}' \"$FAXFILE\"`"

HTH,
-dnh

-- 
Treat your password like your toothbrush. Don't let anybody else
use it, and get a new one every six months.  -- Clifford Stoll
                                 [found in ssl_engine_pphrase.c]



Reply to: