sed および tr unix ユーティリティを (端末から) 使用する...
echo "CamelCase" | sed -e 's/\([A-Z]\)/-\1/g' -e 's/^-//' | tr '-' '_' | tr '[:lower:]' '[:upper:]'
最後に「ID」が付いたキャメルケースの文字列があり、それをそのままにしておきたい場合は、これを使用してください...
echo "CamelCaseID" | sed -e 's/\([A-Z]\)/-\1/g' -e 's/^-//' | tr '-' '_' | tr '[:lower:]' '[:upper:]' | sed -e 's/I_D$/ID/g'
RubyでStringクラスを拡張することで...
class String
def camelcase_to_underscore
self.gsub(/::/, '/').
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
gsub(/([a-z\d])([A-Z])/,'\1_\2').
tr("-", "_").
upcase
end
end
これで、任意の文字列に対して camelcase_to_underscore メソッドを実行できます。例:
>> "CamelCase".camelcase_to_underscore
=> "CAMEL_CASE"