sed正则表达式 - 将标题大小写转换为驼峰式

4

我有一些文本,可能是“普通句子大小写”或“标题大小写文本”,我想将它们转换为titleCaseText。

以sed命令为例,假设有字符串This Is Not the Real string

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

我收到输出
ThisIsNotTheRealString

如何将第一个 T 改为小写的 t
2个回答

4
你可以使用正则表达式^([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'

然后,将第一组的值转换为小写,并且将第二组(正如您已经在做的那样)转换为大写。请参见在线演示
细节:
- `^([[:upper:]])` - 匹配行的开头,然后将大写字母捕获到第1组中 - `|` - 或 - `[[:blank:]]+` - 匹配1个或多个水平空白字符 - `([[:alpha:]])` - 然后将任何字母捕获到第2组中
`\l\1` 将第1组的值转换为小写,而 `\U\2` 将第2组的值转换为大写。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接