LoginSignup
8
2

More than 3 years have passed since last update.

sed, tr, awk でキャメルケースやスネークケースを変換する

Last updated at Posted at 2020-06-23

シェルスクリプト中に変換したいことがあったのでちょっと書いてみました。
ちなみに、CamelCase などの言葉はこんな感じです。

  • キャメルケース(Camel Case)
    • 最初の1単語は小文字、残りは先頭大文字で区切る。Javaなどの変数名で使う。
    • e.g. camelCaseString
  • パスカルケース(Pascal Case)
    • キャメルケースの最初の一文字が大文字。クラス名などで使う。
    • e.g. PascalCaseString
  • スネークケース(Snake Case)
    • すべて小文字で単語の区切りがアンダースコア (_)
    • e.g. snake_case_string
  • ケバブケース(Kebab Case)
    • すべて小文字で単語の区切りがハイフン (-)
    • e.g. kebab-case-string

ケバブケースは調べてて初めて名前を知。

前提条件

Macユーザーなので、 sed は BSD のものを使っています。
GNU sed の場合は読み替えてください。

Camel(Pascal) to Snake(Kebab)

  • 大文字区切りを見つけてアンダースコア(またはハイフン)を挿入
  • 英字をすべて小文字に変換
sed -E 's/(.)([A-Z])/\1_\2/g' | tr '[A-Z]' '[a-z]'

ポイント: 大文字を検出する場所はその前に少なくとも1文字以上あることを条件にしているので、パスカルケースの場合の1文字目は対象外になる

Snake(Kebab) to Pascal

awk の区切り文字をアンダースコア(またはハイフン)にして各フィールドごとに先頭を大文字にする

awk -F '_' '{ for(i=1; i<=NF; i++) {printf toupper(substr($i,1,1)) substr($i,2)}} END {print ""}'

Snake(Kebab) to Camel

パスカルケースへの変換とほぼ同様だが、2単語目から大文字化する。

awk -F '_' '{ printf $1; for(i=2; i<=NF; i++) {printf toupper(substr($i,1,1)) substr($i,2)}} END {print ""}'
8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2