← Back to team overview

sslug-teknik team mailing list archive

Re: sh scripting - parsing af input ?

 

Brian Ipsen wrote:
"Ole Kofoed Hansen" <ole@xxxxxxxxxxxxxxx> wrote in message
news:3F455885.9050406@xxxxxxxxxxxxxxx...


Jeg er ved at forsøge at lave et script til en .qmail fil, som skal

lave

visse ting på indkomne beskeder... Scriptet bliver kaldt med /bin/sh

(ifølge

qmail-dokumentationen)

Jeg er klar over, at når mit script/min kommando bliver kaldt, så ligger
besked i stdin... denne gemmer jeg først med:

TMPFILE=`mktemp /tmp/$0.XXXXXX` || exit 1
tee $TMPFILE >/dev/null 2>&1

Ved ikke om det kan gøres på andre måder, men det her burde da virke...
Anyway, det primære problem kommer her:

En indkommen mail køres gennem reformime -i - som giver f.eks. dette

output:

...


Følgende ikke-testede perl-stump burde kunne hjælpe dig på vej. Det skal
 have outputtet ligesom dit eksempel på STDIN og på STDOUT skriver den
de relevante sektionsnumre - på hver sin linie.

#!/usr/bin/perl -w
$normalspace = $/;
$afsnitspace = "";

$/ = $afsnitspace;
@sektioner = grep { /content-type: message\/rfc822/ } <STDIN>;

$/ = $normalspace;
foreach $sektion (@sektioner) {
  if ($sektion =~ /^section: (.*)$/ ) { print "$1\n"; }
}


Tak for dit input - jeg får ikke noget output fra koden. Indsætter jeg print
"$sektion"; i foreach løkken får jeg godt nok de 2 blokke ud, som er af
message/rfc822 typen  - men sektions-nummeret får jeg ikke....

/Brian


Måske det vil virke, hvis du erstatter linien med:

$sektion =~ /section:\s([^\s])\s/; $nr=$1; print "$nr\n";

istedet for den if-konstuktion, som jeg egentlig heller ikke var glad
for. Ellers er der nok nogen på listen, som er mere perl-haj end jeg.

Hvis det heller ikke virker, kan du eventuelt skrive hele
$sektion-blokkene og sende dem igennem en grep eller sed.

Med venlig hilsen

Ole



Follow ups

References