Macos 在MAC OS High sierra中,将文本转换为snake-case到camelCase

Macos 在MAC OS High sierra中,将文本转换为snake-case到camelCase,macos,sed,operating-system,Macos,Sed,Operating System,我想把2+字转换成驼峰大小写。我试过在线ubuntu版本,效果很好。但不是在mac os上 my amazing-long\u变量->MyAmazing-LongVariable echo“my Azing-long_variable”| sed-E的/[| | | |-]([a-z])/\U\1/gi'| sed-E的/^([a-z])/\l\1/' 我的输出: sed:1:“s/[| | |-]([a-z])/\U\1/gi”:替换命令中的错误标志:“i” 第二次尝试: echo“my Az

我想把2+字转换成驼峰大小写。我试过在线ubuntu版本,效果很好。但不是在mac os上

my amazing-long\u变量->MyAmazing-LongVariable

echo“my Azing-long_variable”| sed-E的/[| | | |-]([a-z])/\U\1/gi'| sed-E的/^([a-z])/\l\1/'

我的输出:

sed:1:“s/[| | |-]([a-z])/\U\1/gi”:替换命令中的错误标志:“i”

第二次尝试:

echo“my Azing-long_variable”| sed-E的/[| | | |-]([a-z])/\U\1/g'| sed-E的/^([a-z])/\l\1/'

输出:

Myuamazingouv可变


感谢
\U
\l
是GNU-sed扩展。Perl将在开箱即用的情况下为您工作:

echo "my amazing-long_variable" | perl -nE 'say lcfirst join "", map {ucfirst lc} split /[^[:alnum:]]+/'
你从右到左读这个

  • split/[^[:alnum:]+/
    在任何非字母数字字符序列上拆分默认变量
    $\uu
    (即当前行),从而生成列表“my”、“Azing”、“long”、“variable”
  • map{ucfirst lc}
    将代码
    ucfirst lc
    依次应用于每个单词。
    • 您可能会猜到,
      lc
      将单词小写,然后
      ucfirst
      将第一个字符大写
    • 这将导致列表“我的”、“惊人的”、“长的”、“可变的”
  • join”“
    使用空字符串“MyAmazingLongVariable”连接单词
  • lcfirst
    小写第一个字符:“myAmazingLongVariable”

perl选项
-n
在输入文件和/或标准输入上循环,将每一行放入“默认变量”
$\ucode><代码>-l
负责处理打印命令的行尾。

我通过下面的代码实现了这一点。这不是一个很好的解决方案,但很有效;)

find-名称'*.java'-print0 | xargs-0 perl-p-i-e“s/data selenium[\s]*=[\s]*'(\w+)[\s\-](\w+)/data selenium='\l\$1\u\$2'/g”
找到-名称'*.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”
找到-名称'*.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\u\$4'/g”
找到-名称'*.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\u\$5'/g”

找到-名称'*.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\u\$6'/g”
这是一个非常好的建议。我如何更改它,以便它找到所有包含“my Azing-long_variable”的文件,并使用您的一行代码将其替换为camelCase。感谢您,我有文件test.txt,内容如下:
一些垃圾数据selenium='hello world'一些垃圾数据selenium='hello-world'一些垃圾数据selenium='hello'
我想替换所有
hello world
hello world要想
helloWorld
将输入数据放在您的问题中可以正确格式化的地方另一个想法是安装homebrew,这样您就可以访问GNU工具