Вы довольно близки.
В Mac OS X вам потребуется установить GNU sed, потому что используемая вами функция - \U
- это расширение GNU.
Так, начните с установки:
▶ brew install gnu-sed
Затем я обычно вставляю где-то такой код:
shopt -s expand_aliases
alias sed='/usr/local/bin/gsed'
И тогда ваш GNU sed будет работать.
НаконецЯ бы упростил этот код следующим образом:
▶ sed -E 's/(::)(.*)(::)/\1\U\2\E\3/' <<< "foo::bar::baz"
foo::BAR::baz
Отметив, что -E
дает вам расширенные регулярные выражения и более чистый синтаксис при выполнении захвата.