Simple blah
remplacement :
$ sed -e 's/\[[^]]*_blah]/[Blah]/g' old.sql > new.sql
Plus général :
$ perl -pe 's/\[[^]_]+_(.+?)]/[\u$1]/g' old.sql > new.sql
La raison pour laquelle il faut faire correspondre le préfixe avec [^]_]+
plutôt que .+
est que les quantificateurs d'expressions régulières sont gourmands. Par exemple, ce dernier, lorsqu'on lui donne [xx_blah][xx_blah]
de l'entreprise, qui en absorberait le plus possible et qui s'alignerait sur les xx_blah][xx
Ce n'est pas ce que vous vouliez. L'exclusion du crochet droit et du trait de soulignement est une mesure de sécurité.
Les \u
dans le remplacement est un séquence d'échappement qui met en majuscule la lettre suivante.
Si vous préférez sed et que vos yeux ne s'irritent pas à cause de tous les backslashes, optez pour
$ sed -e 's/\[[^]_]\+_\(.\+\?\)]/[\u\1]/g' old.sql > new.sql