我有一些文字可能有"常规句子"或"标题案例文本",我想将它们转换为titleCaseText。
将示例This Is Not the Real string
与sed命令
s/(^|\s)([A-Za-z])/\U\2/g
我得到了输出
ThisIsNotTheRealString
如何将第一个T
设为小写t
?
答案 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组的值变为大写。