integers uit bestand matchen

Pagina: 1
Acties:

  • tersmitten
  • Registratie: Februari 2005
  • Laatst online: 08-01 10:31
ik heb bv een bestand met deze inhoud:
code:
1
2
3
rtsp://streams.omroep.nl/vpro/18247499/surestream.rm?title=Petar
rtsp://streams.omroep.nl/vpro/18242401/surestream.rm?title=Steve
rtsp://cachestreams.omroep.nl/bongo02/0/vpro/30567163/surestream.rm?title=Adam

en nou wil ik dit echo'en
code:
1
2
3
18247499
18242401
30567163

het is me al wel geluk om dit als output te krijgen:
code:
1
2
3
rtsp://streams.omroep.nl/vpro//surestream.rm?title=Petar
rtsp://streams.omroep.nl/vpro//surestream.rm?title=Steve
rtsp://cachestreams.omroep.nl/bongo02/0/vpro//surestream.rm?title=Adam

maar ik wil dus precies omgekeerd
ik gebruik nu dit:
code:
1
sed '/[0-9]\{8\}/ s/[0-9]\{8\}//' $stream_list

wie helpt mij?

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
code:
1
perl -pe 's/.*?(\d{8}).*/$1/'

Dit neemt trouwens aan dat het ID wat je opzoekt altijd precies 8 cijfers heeft, en dat er geen andere getallen van 8 of meer cijfers in de url staan.
edit:
DataGhost: je hebt helemaal gelijk, ik had mn eigen testcode nog veranderd nadat ik het hier al gepaste had, en hier niet meer aangepast voor ik op "send" klikte, my bad :)

[ Voor 32% gewijzigd door blaataaps op 13-10-2006 01:44 . Reden: damn you ]


  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 18:31

DataGhost

iPL dev

blaataaps schreef op vrijdag 13 oktober 2006 @ 01:36:
code:
1
perl -pe 's/.*?(\d+).*/$1/'

Dit neemt trouwens aan dat het ID wat je opzoekt altijd precies 8 cijfers heeft, en dat er geen andere getallen van 8 of meer cijfers in de url staan.
dan zou je {8} gebruiken ipv +, nu ga je uit van 1 of meer :) dan krijg je iets als dit
code:
1
2
3
18247499
18242401
02


Als je nou dit deed:
code:
1
perl -pe 's/.*?(\d{8}).*/$1/'

komt het inderdaad overeen met wat jij zei :) Je komt dan alsnog in de problemen als er toevallig 8 cijfers voor het eigenlijke ID staan, maar dat kan de TS met dit zetje en een wat uitgebreidere regex zelf wel fixen, gok ik :)
tersmitten schreef op vrijdag 13 oktober 2006 @ 01:45:
Het werkt al bijna alleen krijg ik bij die laatste regel 02 als output:
Mja, dat post ik net dus. Je had het trouwens zelf ook kunnen zien, dunkt me. Het is niet bepaald een moeilijke regex. Kijk ook even hier: Google zoeken naar 'man perlre' en dan de eerste hit ofzo.

[ Voor 25% gewijzigd door DataGhost op 13-10-2006 01:47 ]


  • tersmitten
  • Registratie: Februari 2005
  • Laatst online: 08-01 10:31
Het werkt al bijna alleen krijg ik bij die laatste regel 02 als output:

ik gebruik het zo:
code:
1
2
3
4
5
6
7
8
#/bin/bash
#
stream_list="streams.lst";

cat $stream_list | while read line;
do
    echo "${line}" | perl -pe 's/.*?(\d+).*/$1/';
done


de getallen die ik wil matchen voldoen altijd aan [0-9]{8} en staan tussen //

  • tersmitten
  • Registratie: Februari 2005
  • Laatst online: 08-01 10:31
Hartstikke bedank, ik er me er zeker even in verdiepen...

  • tersmitten
  • Registratie: Februari 2005
  • Laatst online: 08-01 10:31
Nog een laatst dingetje. Wat ik uiteindelijk wil hebben is 1 var met 'rtsp://cachestreams.omroep.nl/bongo02/0/vpro/30567163/surestream.rm?title=Adam' en 1 met '30567163' is het mogelijk om de uitkomst van de perl regex op de een of andere manier in een var te krijgen?

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 18:31

DataGhost

iPL dev

tersmitten schreef op vrijdag 13 oktober 2006 @ 02:46:
Nog een laatst dingetje. Wat ik uiteindelijk wil hebben is 1 var met 'rtsp://cachestreams.omroep.nl/bongo02/0/vpro/30567163/surestream.rm?title=Adam' en 1 met '30567163' is het mogelijk om de uitkomst van de perl regex op de een of andere manier in een var te krijgen?
Ja, met een toewijzingsoperator en backticks.
Pagina: 1