/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Klippe tekst imellem to tegn?
Fra : Steen Suder, privat


Dato : 20-07-04 17:15

Jeg har noget MRTG på en Linuxboks og jeg vil gerne klippe dagsgrafen
inkl. statistikken (tallene nedenunder) ud til brug i en anden side.

Dybest set skal jeg have alt, der står imellem 1. <HR> og 2. <HR>.
Jeg kan ikke være helt sikker på at de står på samme linier hver gang,
hvorfor min første indskydelse med at bruge head og tail ikke er egnet.

Hvad er den mest elegante måde at hive teksten ud på?

--
Steen Suder
Prøv at forestille dig, at du er en anden, og læs så din artikel igennem
inden du sender den. Alle har interesse i, at du staver og formulerer
dig, så godt du kan. På den måde forstås det lettere, hvad du skriver.

 
 
Peter Makholm (20-07-2004)
Kommentar
Fra : Peter Makholm


Dato : 20-07-04 17:26

"Steen Suder, privat" <sfs_news_spam@suder.dk> writes:

> Dybest set skal jeg have alt, der står imellem 1. <HR> og 2. <HR>.
> Jeg kan ikke være helt sikker på at de står på samme linier hver gang,
> hvorfor min første indskydelse med at bruge head og tail ikke er egnet.

Står <HR> på deres egne linjer?

Så kan du lave noget perl:

.... | perl -ne 'print if /<HR>/ ... /<HR>/' | ...

Du får dog linjerne med <HR> med.

--
Peter Makholm | I have no caps-lock but I must scream...
peter@makholm.net | -- Greg
http://hacking.dk |

Steen Suder, privat (20-07-2004)
Kommentar
Fra : Steen Suder, privat


Dato : 20-07-04 18:01

Peter Makholm wrote:
> "Steen Suder, privat" <sfs_news_spam@suder.dk> writes:
>
>
>>Dybest set skal jeg have alt, der står imellem 1. <HR> og 2. <HR>.
>>Jeg kan ikke være helt sikker på at de står på samme linier hver gang,
>>hvorfor min første indskydelse med at bruge head og tail ikke er egnet.
>
>
> Står <HR> på deres egne linjer?
>
> Så kan du lave noget perl:
>
> ... | perl -ne 'print if /<HR>/ ... /<HR>/' | ...
>
> Du får dog linjerne med <HR> med.

Efter at have gravet lidt mere i det (ca.):

....
$file =~/<HR>(.*?)<HR>/;


Jeg har imidlertid lige set at det faktisk er 2. og 3. <HR> objektet
står imellem.
Som jeg ser det, ændret det dog ikke meget ved det:

....
$file =~/<HR>.*?<HR>(.*?)<HR>/;

Det var en PERL-løsning i det mindste.


--
Steen Suder
Prøv at forestille dig, at du er en anden, og læs så din artikel igennem
inden du sender den. Alle har interesse i, at du staver og formulerer
dig, så godt du kan. På den måde forstås det lettere, hvad du skriver.

Soren (News) (20-07-2004)
Kommentar
Fra : Soren (News)


Dato : 20-07-04 19:51

"Steen Suder, privat" <sfs_news_spam@suder.dk> writes:

> Efter at have gravet lidt mere i det (ca.):
>
> ...
> $file =~/<HR>(.*?)<HR>/;
>
>
> Jeg har imidlertid lige set at det faktisk er 2. og 3. <HR> objektet står
> imellem.
> Som jeg ser det, ændret det dog ikke meget ved det:
>
> ...
> $file =~/<HR>.*?<HR>(.*?)<HR>/;
>
> Det var en PERL-løsning i det mindste.

meget perl specifikt og mindre unix specifikt nu .

men, en alternativ loesning:

cat file | perl -e 'my @tmp = split /<hr>/, join "", <STDIN>; print $tmp[2];'

du kan saa selv erstatte '2' med den position du har brug for..


Mvh,

--
___
Soren Davidsen / o\
Deliver yesterday, code today, think tomorrow. (_____)
__ http://www.tanesha.net/ _________________________________(___)_______

Steen Suder, privat (20-07-2004)
Kommentar
Fra : Steen Suder, privat


Dato : 20-07-04 20:02

Steen Suder, privat wrote:
> Peter Makholm wrote:
>
>> "Steen Suder, privat" <sfs_news_spam@suder.dk> writes:
>>
>>
>>> Dybest set skal jeg have alt, der står imellem 1. <HR> og 2. <HR>.
>>> Jeg kan ikke være helt sikker på at de står på samme linier hver gang,
>>> hvorfor min første indskydelse med at bruge head og tail ikke er egnet.

<KLIP>

> ...
> $file =~/<HR>.*?<HR>(.*?)<HR>/;
>
> Det var en PERL-løsning i det mindste.

Den kan f.eks. se således ud (en linie):

perl -e 'undef $/; my $f=<STDIN>; $f =~ /<HR>.*<HR>(.*?)<HR>/s; print
$1;' < wan.html

Kan det gøres bedre/kortere/mere effektivt/mere elegant *NIX-style?

--
Steen Suder
Prøv at forestille dig, at du er en anden, og læs så din artikel igennem
inden du sender den. Alle har interesse i, at du staver og formulerer
dig, så godt du kan. På den måde forstås det lettere, hvad du skriver.

Peter Makholm (20-07-2004)
Kommentar
Fra : Peter Makholm


Dato : 20-07-04 20:04

sorend@rediffmail.com (Soren (News)) writes:

> men, en alternativ loesning:
>
> cat file | perl -e 'my @tmp = split /<hr>/, join "", <STDIN>; print $tmp[2];'

Samme løsning uden en unødig cat og lidt perlmagi:

perl -n0777aF'<HR>' -e 'print $F[2]' file

Forklaring:

-n får perl til at udføre 'scriptet' for hver inddata-record.

-0777 slurp-mode, får perl til at læse hele filen i et hug

-a auto-split, splitter data op i @F

-F'<HR>' splitter på /<HR>/ istedet for på /\s+/

> du kan saa selv erstatte '2' med den position du har brug for..

Også her.

--
Peter Makholm | Perhaps that late-night surfing is not such a
peter@makholm.net | waste of time after all: it is just the web
http://hacking.dk | dreaming
| -- Tim Berners-Lee

Peter Makholm (20-07-2004)
Kommentar
Fra : Peter Makholm


Dato : 20-07-04 20:10

"Steen Suder, privat" <sfs_news_spam@suder.dk> writes:

> Den kan f.eks. se således ud (en linie):
>
> perl -e 'undef $/; my $f=<STDIN>; $f =~ /<HR>.*<HR>(.*?)<HR>/s; print
> $1;' < wan.html
>
> Kan det gøres bedre/kortere/mere effektivt/mere elegant *NIX-style?

Det er nok mere et spørgsmål om perl end om unix. Men lidt gentagelse
af mit andet indlæg, så er der en række af de ting du gør der kan
gøres lettere med nogle flag til perl:

Istedet for 'undef $/;' kan du bruge -0777. Begge dele får perl til at
gå i slurp-mode.

Når du nu alligevel kun har én ting at læse (hele filen) er det let at
putte det in i en 'while(defined($_ = <>))'-løkke. Dette gøres med
flaget -n.

Altså noget ala:

perl -0777ne '/<HR>.*<HR>(.*?)<HR>/s && print $1'

Jeg bruger && fordi det er æstetisk pænere for filer der ikke har tre
gange <HR>. Men du vil ikke kunne se forskel.

--
Peter Makholm | First you fall in love with Antarctica, and then it
peter@makholm.net | breaks your heart
http://hacking.dk | -- Antarctica

Søg
Reklame
Statistik
Spørgsmål : 177551
Tips : 31968
Nyheder : 719565
Indlæg : 6408830
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste