linux bash,骆驼大小写string用破折号分开

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

MyDirectoryFileLine 

 my-directory-file-line 

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

Solutions Collecting From Web of "linux bash,骆驼大小写string用破折号分开"

您可以使用s/\([AZ]\)/-\L\1/g来查找大写字母,并用短划线代替,并且是小写字母。 但是,这会给你一个破折号,所以你需要另一个sed表达式来处理这个。

这应该工作:

 sed -e 's/\([AZ]\)/-\L\1/g' -e 's/^-//' <<< "MyDirectoryFileLine" 
 echo MyDirectoryFileLine | perl -ne 'print lc(join("-", split(/(?=[AZ])/)))' 

打印my-directory-file-line

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

 NEW=`echo MyDirectoryFileLine | sed 's/\(.\)\([AZ]\)/\1-\2/g' | tr '[:upper:]' '[:lower:]' 

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

这可能适合你:

 <<<"MyDirectoryFileLine" sed 's/[AZ]/-\l&/g;s/.//' my-directory-file-line 

使用GNU sed:

 echo "MyDirectoryFileLine"|sed -e 's/\([AZ]\)/-\L\1/g' 

如果你感到困扰,你只需要去掉第一个破折号:

 echo "MyDirectoryFileLine"|sed -e 's/\([AZ]\)/-\L\1/g' -e 's/^-//' 

BSD sed它有点长:

 echo "MyDirectoryFileLine"|sed -e 's/\([AZ]\)/-\1/g' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' -e 's/^-//' 

更新 :BSD版本将与GNU版本一起工作,所以我建议使用后者。