sedを使ってキャメルケース、スネークケースの相互変換を行う
Contents
はじめに
プロジェクトのソースコードの中のスネークケース文字列をキャメルケース文字列に変換する必要があったので sed
で変換できるか試してみました。
検証環境
$ sed --version
sed (GNU sed) 4.2.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文字を小文字に変換
- 大文字を探し置換
_
(アンダースコア)を前に付与
- 全て小文字(あるいは大文字)に変換
変換(小文字のみ)
小文字のスネークケースに変換
# 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
ひとこと
多くのケースを想定しなければもっとシンプルにかけますが、いろんなケースを考え出すとどんどん複雑になりますね。
ディスカッション
コメント一覧
まだ、コメントがありません