linux bash,驼峰案例字符串以破折号分隔

arm*_*dfp 18 linux bash camelcasing

有没有办法转换这样的东西:

MyDirectoryFileLine
Run Code Online (Sandbox Code Playgroud)

my-directory-file-line
Run Code Online (Sandbox Code Playgroud)

我找到了一些方法将所有字母转换为大写或小写,但不是这样; 有任何想法吗?

dog*_*ane 26

您可以使用s/\([A-Z]\)/-\L\1/g查找大写字母并用短划线替换它,它是小写字母.但是,这会在行的开头给你一个破折号,所以你需要另一个sed表达式来处理它.

这应该工作:

sed --expression 's/\([A-Z]\)/-\L\1/g' \
    --expression 's/^-//'              \
    <<< "MyDirectoryFileLine"
Run Code Online (Sandbox Code Playgroud)


4nd*_*rew 11

我建议使用sed来做到这一点:

NEW=$(echo MyDirectoryFileLine        \
     | sed 's/\(.\)\([A-Z]\)/\1-\2/g' \
     | tr '[:upper:]' '[:lower:]')
Run Code Online (Sandbox Code Playgroud)

UPD我忘记转换为小写,更新代码


eum*_*iro 8

echo MyDirectoryFileLine | perl -ne 'print lc(join("-", split(/(?=[A-Z])/)))'
Run Code Online (Sandbox Code Playgroud)

版画 my-directory-file-line

  • 现在调用Perl并不是真的在使用Bash,不是吗? (2认同)