使用 sed 将驼峰命名法转换为 under_score

Tho*_*art 1 command-line bash sed

我有一个 sed 脚本,可以将camelCase转换为under_score,这对于这个例子非常有用:

myvar="camelCase"
converted="$(echo $myvar | sed 's/\([A-Z]\)/_\L\1/g;s/^_//')"

echo converted
// result: camel_case
Run Code Online (Sandbox Code Playgroud)

然而,我有以下情况:

myvar="camelCASE"
converted="$(echo $myvar | sed 's/\([A-Z]\)/_\L\1/g;s/^_//')"

echo converted
// result: camel_c_a_s_e
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下我需要的结果是:camel_case。

需要明确的是,最终的 sed 脚本应该适用于“camelCase”以及“camelCASE”和“CAMELcase”。

myvar 绝不能包含特殊字符或空格

cma*_*.fr 7

您必须考虑到大小写更改是单词的标记。_必须在大小写更改之前放置空格

尝试这个 :

$ echo 'CamelCASECamelCase' \
| sed 's/\([^A-Z]\)\([A-Z0-9]\)/\1_\2/g' \
| sed 's/\([A-Z0-9]\)\([A-Z0-9]\)\([^A-Z]\)/\1_\2\3/g' \
| tr '[:upper:]' '[:lower:]'

# will output this
camel_case_camel_case
Run Code Online (Sandbox Code Playgroud)