Avatar billede karmapolice Nybegynder
18. september 2003 - 17:49 Der er 1 kommentar og
1 løsning

sed - regular ekspressions

Jeg har nogle filer som jeg godt vil have lavet søg og erstat i med et bash shell script:
cd WORK
for fl in *.vhd; do
cp $fl ../WORK2/$fl.old
sed 's/x/y/g' ../WORK2/$fl.old > ../WORK2/$fl
rm -f ../WORK2/$fl.old
done

...så langt så godt, men hvad nu hvis jeg vil erstatte funktionskald af en bestemt slags til funktionskald af en anden slags:

f.eks. erstattes
x(ukendt_navn_på_variabel)
med
y(konverter(ukendt_navn_på_variabel))

I det nye udtryk skal der være en ekstra parentes til sidst efter variablen. Kan regExp/sed overhoved klare dette?
Avatar billede venne Nybegynder
19. september 2003 - 08:33 #1
Prøv med denne sed:

sed 's/x(\([^)]*\))/y(konverter(\1))/g'

Den virker ikke hvis der er parenteser inde i parameterlisten, men sålænge det kun er en variabel går det vist.
Avatar billede karmapolice Nybegynder
19. september 2003 - 10:23 #2
Det var sgu sejt nok, virker perfekt. Jeg har i øvrigt udvidet den lidt da jeg i nogle tilfælde har en talparameter ekstra som ikke er nødvendig mere:
sed 's/x(\([^)]*\), [0-9]*)/y(konverter(\1))/g'
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester