はじめに
プロジェクトのソースコードの中のスネークケース文字列をキャメルケース文字列に変換する必要があったので sed で変換できるか試してみました。
検証環境
1
2
| $ sed --version
sed (GNU sed) 4.2.2
|
スネークケース から キャメルケース への変換
ロジック解説
- 全て小文字に変換
_? (アンダースコアと何かの文字)の組合せを探し置換_ (アンダースコア)は除去_ に続く文字を大文字に変換
1
2
3
4
5
6
7
8
9
10
11
12
| # 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
4
5
6
7
8
9
10
| # 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
|
変換(大文字のみ)
大文字のスネークケースに変換
1
2
3
4
5
6
7
8
9
10
| # 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
|
ひとこと
多くのケースを想定しなければもっとシンプルにかけますが、いろんなケースを考え出すとどんどん複雑になりますね。