Shell Scripting中字符的小写到大写

时间:2012-09-05 17:57:54

标签: perl shell unix sed awk

  

可能重复:
  Character Lowercase to Uppercase in Shell Scripting

我的价值为:james,adam,john我试图将其设为James,Adam,John(每个名字的第一个字符应为大写)。

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

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

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

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

4 个答案:

答案 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