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

时间:2018-02-09 15:35:49

标签: bash

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

$ string="A FEW WORDS"
$ echo "${string,}"
a FEW WORDS
$ echo "${string,,}"
a few words
$ echo "${string,,[AEIUO]}"
a FeW WoRDS

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

$ 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

3 个答案:

答案 0 :(得分:2)

像GNU sed这样的文本处理工具可以帮到你:

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

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

\w[[:alnum:]_]的简写,即您的语言区域中的任何字母或数字加上_

答案 1 :(得分:1)

你可以试试这种方式

string="a few words"
set -- $string
string=$(echo "${@^}")
echo "$string"

输出

A Few Words

答案 2 :(得分:0)

如果将字符串传递给array,则可以使用参数扩展。

这会将第一个char设置为大写:

strings="a few words"

arr=( $strings )

echo "${arr[@]^}"

输出:

A Few Words