在MAC OS High sierra将文本转换为snake case to camelCase

时间:2018-05-07 23:40:50

标签: macos sed operating-system

我想将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

由于

2 个答案:

答案 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"