sed regex-将标题大小写转换为camelCase

sed regex-将标题大小写转换为camelCase,regex,sed,Regex,Sed,我有一些文本可能有“常规句子大小写”或“标题大小写文本”,我想把它们转换成标题大小写文本 以sed命令为例,这不是真正的字符串 s/(^|\s)([A-Za-z])/\U\2/g 我得到输出 ThisIsNotTheRealString 如何使第一个T变为小写T?一种方法是使用两个不同的替换 $ s='This Is Not the Real string' $ echo "$s" | sed -E 's/^[A-Z]/\l&/; s/\s([A-Za-z])/\u\1/g' thi

我有一些文本可能有“常规句子大小写”或“标题大小写文本”,我想把它们转换成标题大小写文本

以sed命令为例,这不是真正的字符串

s/(^|\s)([A-Za-z])/\U\2/g
我得到输出

ThisIsNotTheRealString

如何使第一个
T
变为小写
T

一种方法是使用两个不同的替换

$ s='This Is Not the Real string'
$ echo "$s" | sed -E 's/^[A-Z]/\l&/; s/\s([A-Za-z])/\u\1/g'
thisIsNotTheRealString

$ s='Regular sentence case'
$ echo "$s" | sed -E 's/^[A-Z]/\l&/; s/\s([A-Za-z])/\u\1/g'
regularSentenceCase
如果您有混合案例输入:

$ s='ReGulAr sEntEncE cASe'
$ echo "$s" | sed -E 's/^[a-zA-Z]+/\L&/; s/\s([A-Za-z]+)/\L\u\1/g'
regularSentenceCase

您可以将第一个大写字母与
^([A-Z])
匹配:

然后,将“组1”值改为小写,将第二个组(正如您已经做的)改为大写。看

详细信息

  • ^([[:upper:]])
    -匹配行首,然后将大写字母捕获到组1中
  • |
    -或
  • [[:blank:][]+
    -匹配一个或多个水平空白字符
  • ([[:alpha:]])
    -然后将任何字母捕获到组2中
\l\1
将组1中的值转换为小写,
\U\2
将组2中的值转换为大写

sed -E 's/^([A-Z])|[[:blank:]]+([A-Za-z])/\l\1\U\2/g'
sed -E 's/^([[:upper:]])|[[:blank:]]+([[:alpha:]])/\l\1\U\2/g'