在 bash 4 中将每个单词的第一个字符设置为大写,其他字符设置为小写?

Chr*_*ris 3 bash

bash 中的小写/大写有一个很好的功能:

$ string="A FEW WORDS"
$ echo "${string,}"
a FEW WORDS
$ echo "${string,,}"
a few words
$ echo "${string,,[AEIUO]}"
a FeW WoRDS
Run Code Online (Sandbox Code Playgroud)

有人知道类似的方法将变量上每个单词中的第一个字符设置为大写,并将每个单词中的其余字符设置为小写吗?

$ echo "${string,,[^.]}"
a few words
$ echo "${string,,[^]}"
A FEW WORDS
$ echo "${string,,.}"
A FEW WORDS
$ echo "${string,,^.}"
A FEW WORDS
$ echo "${string,,^?}"
A FEW WORDS
$ echo "${string,,?}"
a few words
Run Code Online (Sandbox Code Playgroud)

Tom*_*ech 8

GNU sed 等文本处理工具可以在这方面为您提供帮助:

$ sed -E 's/(\w)(\w*)/\U\1\L\2/g' <<<"$string"
A Few Words
Run Code Online (Sandbox Code Playgroud)

这会为每个单词捕获两个组(一个单词字符,后跟零个或多个单词字符)。替换用于\U将第一组大写并\L小写其余组。

\w是 的简写[[:alnum:]_],即您所在区域中被视为字母或数字的任何内容,加上_