sed regex - 将标题案例转换为camelCase

时间:2018-01-23 08:33:25

标签: regex sed

我有一些文字可能有"常规句子"或"标题案例文本",我想将它们转换为titleCaseText。

将示例This Is Not the Real string与sed命令

一起使用
s/(^|\s)([A-Za-z])/\U\2/g

我得到了输出

ThisIsNotTheRealString

如何将第一个T设为小写t

2 个答案:

答案 0 :(得分:3)

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

$ 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

答案 1 :(得分:3)

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

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'

然后,将Group 1值转换为小写,将第二组(如您所做的那样)转换为大写。请参阅online demo

<强>详情

  • ^([[:upper:]]) - 匹配行的开头,然后将大写字母捕获到第1组
  • | - 或
  • [[:blank:]]+ - 匹配1个或多个水平空格字符
  • ([[:alpha:]]) - 然后将任何字母捕获到第2组

\l\1会将第1组的值变为小写,\U\2会将第2组的值变为大写。