Toon posts:

bash scripting : selectie van iets tussen bepaalde tekens

Pagina: 1
Acties:

Verwijderd

Topicstarter
Al sinds lang zoek ik naar een "mooie" manier om stukken uitvoer te selecteren.
Volgende mencoder-uitvoer illustreert het probleem:

crop area: X: 632..0 Y: 0..63 (-vop crop=-632:64:632:0)0,035 [2011:96]

nu moet ik de zaken tussen haakjes hebben
"-vop crop=-632:64:632:0"

Momenteel heb ik daarvoor :
sed -e 's/.*(//' -e 's/).*//'
dus in feite knip ik gewoon hetgeen links en rechts ervan. maar kan dit niet beter ?

[ Voor 10% gewijzigd door moto-moi op 27-07-2003 16:51 ]


Verwijderd

cut -d\( -f2 | cut -f\) -f1 doet hetzelfde...

  • Valium
  • Registratie: Oktober 1999
  • Laatst online: 04-05 20:39

Valium

- rustig maar -

Hoe bedoel je "beter"? Zo'n sed-regel of cut-regel is vrij mooi vind ik persoonlijk.
En waarom doe je dat niet in een keer?

[edit]
Is dit dan mooier?
[code]
sed 's/.*(\(.*\)).*/\1/'

[ Voor 44% gewijzigd door Valium op 24-07-2003 22:49 ]


  • A_L
  • Registratie: Juni 2001
  • Niet online

A_L

Je kunt het misschien ook zonder sed doen (weer een dependency minder :) ) als je parameter-expansion van bash gebruikt.

code:
1
2
3
var="crop area: X: 632..0 Y: 0..63 (-vop crop=-632:64:632:0)0,035 [2011:96]"
var=${var%)*}
var=${var#*(}
hmmmm.... toch niet helemaal super..... :P
jammer dat je ze niet kunt "nesten"

[ Voor 3% gewijzigd door A_L op 27-07-2003 17:01 . Reden: "" vergeten ]


  • PaneVino
  • Registratie: April 2000
  • Laatst online: 14-10-2025
Effe een duidelijk voorbeeld van de sed-regel in bash :
a="crop area: X: 632..0 Y: 0..63 (-vop crop=-632:64:632:0)0,035 [2011:96]"
b=${a//\(*}
echo ${b//\)*}

Eigenlijk dezelfde manier als jij met sed doet ,maar dan in bash ..

Een andere manier zou kunnen zijn om het op een substr() manier te doen ...

// PaneVino \


Verwijderd

Topicstarter
Valium zijn oplossing heb ik in het verleden ook vaak gebruikt. Blijkbaar is "het wegknippen van wat je niet wilt" toch de enige oplossing. Ook die bash scripting
is interessant.

groetjes,

Dominique

  • eth0
  • Registratie: Mei 2002
  • Laatst online: 15-09-2025
Verwijderd schreef op 24 July 2003 @ 19:40:
cut -d\( -f2 | cut -f\) -f1 doet hetzelfde...
En met awk kan het ook

awk -F"(" '{print $2}' | awk -F")" '{print $1}'

Er zijn dus verschillende optie's om het te doen en die maken allemaal gebruik van de weg knip methode

[ Voor 28% gewijzigd door eth0 op 27-07-2003 11:43 ]


Verwijderd

dominique_ schreef: Blijkbaar is "het wegknippen van wat je niet wilt" toch de enige oplossing.
Nee hoor, met PERL kun je exact doen wat jij wilt. Het volgende commando selecteert met een patern match de tekst tussen de haakjes en drukt dit af.

$ perl -ne '/\(.*\)/; print "$& \n"'

Als je de haakjes ook kwijt wil, moet je iets een iets minder elegante patern match maken:

$ perl -ne '/\-vop crop=-([0-9\:]*)/; print "$& \n"'

[ Voor 15% gewijzigd door Verwijderd op 27-07-2003 11:52 ]


  • phreggle
  • Registratie: Juni 2002
  • Niet online
Verwijderd schreef op 27 July 2003 @ 11:48:
[...]
Als je de haakjes ook kwijt wil, moet je iets een iets minder elegante patern match maken:

$ perl -ne '/\-vop crop=-([0-9\:]*)/; print "$& \n"'
uhm, als je nou gewoon weer (geescapede) haakjes om je match heen zet dan ben je er toch ook. :)
code:
1
2
3
4
phreggle@anouk:~$ a="crop area: X: 632..0 Y: 0..63 (-vop crop=-632:64:632:0)0,035 [2011:96]"
phreggle@anouk:~$ echo $a | perl -ne '/\((.*?)\)/;print($1."\n")'
-vop crop=-632:64:632:0
phreggle@anouk:~$

Verwijderd

@ phreggle Idd. Zo kan het kennelijk ook :). Toch weer een stukje eleganter dan de mijne :D
Pagina: 1