sedを使ってキャメルケース、スネークケースの相互変換を行う

2020-04-06Bash

はじめに

プロジェクトのソースコードの中のスネークケース文字列をキャメルケース文字列に変換する必要があったので sed で変換できるか試してみました。

検証環境

$ sed --version
sed (GNU sed) 4.2.2

スネークケース から キャメルケース への変換

ロジック解説

  1. 全て小文字に変換
  2. _? (アンダースコアと何かの文字)の組合せを探し置換
    • _ (アンダースコア)は除去
    • _ に続く文字を大文字に変換
# 4つのテストケースを実行
$ cat <<EOF | sed -r 's/.*/\L\0/g; s/_([a-z0-9])/\U\1/g;'
xxx_yyy_zzz
XXX_YYY_ZZZ
xYz
XYz
EOF

xxxYyyZzz
xxxYyyZzz
xyz
xyz

キャメルケース から スネークケース への変換

ロジック解説

  1. 先頭1文字を小文字に変換
  2. 大文字を探し置換
    • _ (アンダースコア)を前に付与
  3. 全て小文字(あるいは大文字)に変換

変換(小文字のみ)

小文字のスネークケースに変換

# 3つのテストケースを実行
cat <<EOF | sed -r 's/^./\L\0/; s/([A-Z])/_\1/g; s/.*/\L\0/g;'
xxxYyyZzz
XxxYyyZzz
XyZ
EOF

xxx_yyy_zzz
xxx_yyy_zzz
xy_z

変換(大文字のみ)

大文字のスネークケースに変換

# 3つのテストケースを実行
cat <<EOF | sed -r 's/^./\L\0/; s/([A-Z])/_\1/g; s/.*/\U\0/g;'
xxxYyyZzz
XxxYyyZzz
XyZ
EOF

XXX_YYY_ZZZ
XXX_YYY_ZZZ
XY_Z

ひとこと

多くのケースを想定しなければもっとシンプルにかけますが、いろんなケースを考え出すとどんどん複雑になりますね。

2020-04-06Bash