[sed] regular expression werkt niet zoals verwacht

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • MisterE
  • Registratie: April 2002
  • Laatst online: 01-10 18:56
gebruiker@laptop:~$ echo "Dit_is_een_map.vol12.voL00+1.PAR2" | sed 's/\.vol[0-9]*\+[0-9]*.*$//i'
Dit_is_een_map

Ik begrijp niet waarom "vol12" ook wegvalt.
Als ik het goed begrijp doet mijn regular expression het volgende:
* begin met een punt
* dan het wooord "vol"
* dan een nummer, hierop kan 0 of meer nummers volgen
* dan een letterlijke +
* weer 1 of meer nummers

Hij wist dus ook mijn eerste "vol". terwijl er niet direct na het nummer 12 een plus volgt.

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Nu online
\+ is juist geen letterlijke plus, het moet zonder backslash. Zelfde geldt voor \?, beide zijn GNU extensions volgens `info sed`, wat zou kunnen verklaren waarom deze i.t.t. tot * mét backslash zijn.

Acties:
  • 0 Henk 'm!

  • MisterE
  • Registratie: April 2002
  • Laatst online: 01-10 18:56
top bedankt. Nu werkt ie inderdaad wel :)

Acties:
  • 0 Henk 'm!

  • 0xDEADBEEF
  • Registratie: December 2003
  • Niet online
code:
1
2
$ echo "Dit_is_een_map.vol12.voL00+1.PAR2" | cut -d. -f1,2
Dit_is_een_map.vol12


Zie ook de sig van Creepy: Woy in "[PHP][RegExp] Krijg niet dejuiste data met regexp"

"Religion is an insult to human dignity. With or without it you would have good people doing good things and evil people doing evil things. But for good people to do evil things, that takes religion." - Steven Weinberg


Acties:
  • 0 Henk 'm!

  • MisterE
  • Registratie: April 2002
  • Laatst online: 01-10 18:56
0xDEADBEEF schreef op maandag 19 maart 2012 @ 22:56:
code:
1
2
$ echo "Dit_is_een_map.vol12.voL00+1.PAR2" | cut -d. -f1,2
Dit_is_een_map.vol12


Zie ook de sig van Creepy: Woy in "[PHP][RegExp] Krijg niet dejuiste data met regexp"
opzich zou dit idd ook kunnen omdat ik toch al alle "par2" bestanden eruit vis.

maar zijn altijd leuke oefeningen.
Het is nu dus dit geworden:
echo "Dit_is_een_map.vol3+1.PAR2" | sed 's/\.vol[0-9]\++[0-9]\+.*$//i'

plusjes ipv de sterren omdat ie anders er ook doorviel als er helemaal geen nummer stonden (bijv "Dit_is_een_map.vol+.PAR2")

bedankt voor de hulp