Простой blah
замена:
$ sed -e 's/\[[^]]*_blah]/[Blah]/g' old.sql > new.sql
Более общее:
$ perl -pe 's/\[[^]_]+_(.+?)]/[\u$1]/g' old.sql > new.sql
Причина совпадения префикса с [^]_]+
вместо .+
состоит в том, что квантификаторы регулярных выражений являются жадными. Например, последний, если дать [xx_blah][xx_blah]
в качестве входных данных, будет сожрать как можно больше и соответствовать xx_blah][xx
, а не тому, что вы предполагали. Исключение правой скобки и подчеркивания - это остановка безопасности.
\u
в замене - это escape-последовательность , которая в верхнем регистре следующая буква.
Если вы предпочитаете sed и ваши глаза не пересекаются со всеми обратными слешами, используйте
$ sed -e 's/\[[^]_]\+_\(.\+\?\)]/[\u\1]/g' old.sql > new.sql