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 绝不能包含特殊字符或空格
您必须考虑到大小写更改是单词的标记。_必须在大小写更改之前放置空格
尝试这个 :
$ 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)