Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: vervangen komma door een punt met voorwaarde  (gelezen 2651 keer)

nahjo

  • Gast
vervangen komma door een punt met voorwaarde
« Gepost op: 2017/12/30, 18:39:33 »
Hoi,
zit wat te scripten maar heb het gevoel dat iets wel wat beter kan maar ik kan het op het net niet vinden.
In een bestand wil ik de combnatie komma + cijfer vervangen door een punt + cijfer (conversie van een getal naar US formaat). Ik heb het volgende in het script staan
sed -i -e "s/,0/.0/g;s/,1/.1/g;s/,2/.2/g;s/,3/.3/g;s/,4/.4/g;s/,5/.5/g;s/,6/.6/g;s/,7/.7/g;s/,8/.8/g;s/,9/.9/g"maar heb het gevoel dat het wel eenvoudiger kan.
Ergo eigenlijk zou je cijfer+comma+cijfer moeten vervangen door cijfer+punt+cijfer maar ja dan gaat het wel een hele lange opdracht worden  ^-^
Iemand een goede tip?


Offline MKe

  • Lid
Re: vervangen komma door een punt met voorwaarde
« Reactie #1 Gepost op: 2017/12/30, 21:32:57 »
Als volgt:

sed "s/\(,\)\([[:digit:]]\)/\.\2/g"
Ik maak hier 2 groepen in het match patroon met behulp van haken. Ik gebruik '[[:digit:]]' om alle getallen te matchen.
Met de '\2' in de vervangingstekst geef ik de 2e groep aan, in dit geval het getal.
« Laatst bewerkt op: 2017/12/30, 21:38:43 door MKe »
Mijn blokkendoos blog: http://mke21.wordpress.com/

nahjo

  • Gast
Re: vervangen komma door een punt met voorwaarde
« Reactie #2 Gepost op: 2017/12/30, 22:28:19 »
Super bedankt!
Het werkt als een tierelier en is een stimulans om er weer eens goed in te duiken  :)

Offline MKe

  • Lid
Re: vervangen komma door een punt met voorwaarde
« Reactie #3 Gepost op: 2017/12/31, 10:27:05 »
Het is nogal onleesbaar niet? Regex is super krachtig, maar een draak van een syntax. Iig succes ermee.

nahjo

  • Gast
Re: vervangen komma door een punt met voorwaarde
« Reactie #4 Gepost op: 2017/12/31, 11:30:05 »
Het is nogal onleesbaar niet? Regex is super krachtig, maar een draak van een syntax. Iig succes ermee.
Als je er mee bezig bent is het nog te volgen maar ik kan mij voorstellen dat als je zoiets tegenkomt in een script zonder commentaar dat je eerst wel even met je ogen zit te knipperen.
Nogmaals bedankt voor het zetje in de goede richting.

Heb het toegepast in een scriptje om .csv bestanden wat gemakkelijker te openen in LO Calc. Het stoorde mij dat je met Excel gewoon met klikken kan openen en bij LO steeds die conversie vragen moest afhandelen. Een enkele keer is dat niet zo'n probleem maar tientallen keren per dag gaat wel irriteren.
Er is een util (csv2ods) in linux maar daar ging het niet lekker met de getallen omdat het csv bestand een komma als decimaal teken heeft en een semicolon als veld scheiding.
Dus eerst het decimaal teken wijzigen in een punt (alleen bij getallen) en daarna de conversie naar .ods.
#!/bin/bash
# convertcsv2ods
# converteren van .csv bestand naar .ods
# benodigde software LibreOffice en python-odf
# sudo apt-get install python-odf

# opdracht convert2ods <csv bestand>

FILEIN=$1
if [ -f "$FILEIN" ] ; then
    FILEOUT=${FILEIN%.*}".ods"
    FILETMP=".convertcsv2ods.tmp"
    cp "$FILEIN" -T "$FILETMP"
    sed -i -e "s/\([[:digit:]]\)\(,\)\([[:digit:]]\)/\1\.\3/g" "$FILETMP"
    csv2ods -i "$FILETMP" -o "$FILEOUT" -d ";" -t Blad1 -&& xdg-open "$FILEOUT"
    rm -f "$FILETMP"
fi
exit
« Laatst bewerkt op: 2017/12/31, 14:19:32 door nahjo »

Offline jvecht

  • Lid
    • Just Vecht
Re: vervangen komma door een punt met voorwaarde
« Reactie #5 Gepost op: 2017/12/31, 11:48:06 »
Geweldig zeg. Voor een script aanpassen draai ik mijn hand niet om, maar in dit soort gevallen blijf ik er wel vanaf!

Prachtig gedaan!

groet,

Just
GIMP bundel 2018  38 cursussen met mooi oefenmateriaal. Lekker lezen of er wat van opsteken!
  Boekje "Werken met Xubuntu" 5000+ downloads!
     Het Helpmij Magazine Mei 2021