4

可能的重复:
Shell 脚本中的字符小写到大写

我的价值是:james,adam,john我正在努力做到James,Adam,John(每个名字的第一个字符应该是大写)。

echo 'james,adam,john' | sed 's/\<./\u&/g'

不适用于所有系统。在一个系统中它显示正常..但在另一个系统中不正常...

A="james adam john"
B=( $A )
echo "${B[@]^}"

它抛出了一些语法错误......所以,我正在通过一个长查询来做这个循环,这太长了。有没有捷径可以做到这一点?

4

4 回答 4

7

有很多方法可以定义“名称的开头”。此方法选择单词边界后的任何字母并将其转换为大写。作为副作用,这也适用于“Sue Ellen”或“Billy-Bob”等名称。

echo "james,adam,john" | perl -pe 's/(\b\pL)/\U$1/g'
于 2012-09-05T19:56:58.457 回答
3

使用 Perl:

echo "james,adam,john" | \
  perl -ne 'print  join(",", map{ ucfirst } split(/,/))'
于 2012-09-05T18:08:47.467 回答
2

您可以像这样使用 awk 将输入中每个单词的首字母大写:

echo "james,adam,john" | awk 'BEGIN { RS=","; FS=""; ORS=","; OFS=""; }
{ $1=toupper($1); print $0; }'

输出

James,Adam,John
于 2012-09-05T18:25:50.360 回答
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
于 2012-09-06T07:57:45.023 回答