我想将2个以上的单词转换为骆驼案。我尝试在线ubuntu版本,它的工作原理。但不是在Mac OS上。
my amazing-long_variable -> myAmazingLongVariable
echo "my amazing-long_variable" | sed -E 's/[ |_|-]([a-z])/\U\1/gi' | sed -E 's/^([A-Z])/\l\1/'
我的输出:
sed: 1: "s/[ |_|-]([a-z])/\U\1/gi": bad flag in substitute command: 'i'
第二次尝试:
echo "my amazing-long_variable" | sed -E 's/[ |_|-]([a-z])/\U\1/g' | sed -E 's/^([A-Z])/\l\1/'
输出:
myUamazingUlongUvariable
由于
答案 0 :(得分:0)
\U
和\l
是GNU sed扩展。 Perl将为您提供开箱即用的功能:
echo "my amazing-long_variable" | perl -nE 'say lcfirst join "", map {ucfirst lc} split /[^[:alnum:]]+/'
你从右到左阅读
split /[^[:alnum:]]+/
在任何非字母数字字符序列上拆分默认变量$_
(即当前行),从而产生列表“my”,“amazing”,“long”,“变量“map {ucfirst lc}
依次将代码ucfirst lc
应用于每个单词。
lc
小写单词,然后ucfirst
将第一个字符大写join "",
使用空字符串加入单词:“MyAmazingLongVariable”lcfirst
小写第一个字符:“myAmazingLongVariable” perl选项-n
遍历输入文件和/或标准输入,将每一行放在“默认变量”$_
中。 -l
负责处理print命令的行结尾。
答案 1 :(得分:0)
我通过以下代码实现了这一点。不是一个很好的解决方案,但它有效;)
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3\u\$4'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3\u\$4\u\$5'/g"
find . -name '*.java' -print0 | xargs -0 perl -p -i -e "s/data-selenium[\s]*=[\s]*'(\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)[\s_-](\w+)'/data-selenium='\l\$1\u\$2\u\$3\u\$4\u\$5\u\$6'/g"