我的价值为:james,adam,john
我试图将其设为James,Adam,John
(每个名字的第一个字符应为大写)。
echo 'james,adam,john' | sed 's/\<./\u&/g'
不适用于所有系统。在一个系统中它显示确定..但在另一个系统中不正常...
A="james adam john"
B=( $A )
echo "${B[@]^}"
它抛出了一些语法错误......所以,我通过一个长循环查询来做这个循环,这太长了。 有没有捷径可以做到这一点?
答案 0 :(得分:7)
有很多方法可以定义“名字的开头”。此方法选择单词边界后面的任何字母并将其转换为大写。作为副作用,这也适用于“Sue Ellen”或“Billy-Bob”等名称。
echo "james,adam,john" | perl -pe 's/(\b\pL)/\U$1/g'
答案 1 :(得分:3)
使用Perl:
echo "james,adam,john" | \
perl -ne 'print join(",", map{ ucfirst } split(/,/))'
答案 2 :(得分:2)
您可以使用这样的awk来大写输入中每个单词的首字母:
echo "james,adam,john" | awk 'BEGIN { RS=","; FS=""; ORS=","; OFS=""; }
{ $1=toupper($1); print $0; }'
James,Adam,John
答案 3 :(得分:1)
与 TLP 相同的方法,但使用GNU sed:
echo "james,adam,john,sue ellen,billy-bob" | sed -r 's/\b(.)/\u\1/g'
输出:
James,Adam,John,Sue Ellen,Billy-Bob
如果只有第一个字母大写,请改用:
echo "james,adam,john,sue ellen,billy-bob" | sed 's/[^,]*/\u&/g'
输出:
James,Adam,John,Sue ellen,Billy-bob