首页 > 解决方案 > 在 MAC OS High sierra 中将文本转换为蛇形大小写到驼峰大小写

问题描述

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

输出:

myUamazingUlongU变量

谢谢

标签: macossedoperating-system

解决方案


\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”、“variable”
  • map {ucfirst lc}依次将代码ucfirst lc应用于每个单词。
    • 正如您可能猜到的那样,lc将单词小写,然后ucfirst将第一个字符大写
    • 这导致列表“My”、“Amazing”、“Long”、“Variable”
  • join "",使用空字符串连接单词:“MyAmazingLongVariable”
  • lcfirst第一个字符小写:“myAmazingLongVariable”

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


推荐阅读