← 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:3F45E10D.8090506@xxxxxxxxxxxxxxx...


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....


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.


Ok, perl-scriptet giver mig nu output som:

1.1
1.2

Nu mangler jeg så bare lige at få forklaret hvordan jeg får mit sh script
til at læse de 2 linier fra stdin - og kalde/køre en batch-fil med nummeret
som parameter... f.eks

for (et eller andet)...
do
  /var/qmail/bin/myscript.sh $section
done

?

/Brian




Jeg mener du vil kunne bruge

for section in `kald af perl-scriptet`
do
  /var/qmail/bin/myscript.sh $section
done

Så vil den køre /var/qmail/bin/myscript.sh en gang for hver relevant sektion.

Det væsentlige er, at kaldet af perl-scriptet skal skrives i "back-ticks". Dette tegn sidder normalt på Shift+tasten ved siden af backspace.

Med venlig hilsen

Ole



Follow ups

References