【问题标题】:BASH - Make the first Letter UppercaseBASH - 使第一个字母大写
【发布时间】:2010-10-06 12:21:10
【问题描述】:

我尝试将 CSV 中的第一个字母大写,排序如下:

a23;asd23;sdg3

我想要的是这样的输出

a23;Asd23;Sdg3

所以第一个字符串应该是原样,但第二个和第三个应该有一个大写的第一个字母。我尝试使用 AWK 和 SED,但没有找到正确的解决方案。有人可以帮忙吗?

【问题讨论】:

  • 谢谢大家。 Bart Sas 的回答完全符合我的需求。 :-)

标签: bash string capitalization


【解决方案1】:

只需将分号后面的所有字母大写:

sed -e 's/;./\U&\E/g'

【讨论】:

  • 谢谢。这正是我搜索过的。 :-)
  • 一些解释是有序的,因为sed 中的正则表达式有自己的特殊功能。 \U 将所有字符向右转换为大写,&(可能)与\0 相同,\E 不必要地停止转换。这是另一个解释它的答案的链接:stackoverflow.com/a/2762997/521032
【解决方案2】:

Bash(版本 4 及更高版本)有一个“第一个大写”运算符 ${var^},但在这种情况下,我认为最好使用 sed

sed -r 's/(^|;)(.)/\1\U\2/g' <<< "a23;asd23;sdg3"

【讨论】:

  • 感谢您提及${var^},它对我有用!
【解决方案3】:
echo "a23;asd23;sdg3" | perl -ne 's/(?<=\W)(\w)/ uc($1) /gex;print $_'

a23;Asd23;Sdg3

【讨论】:

    【解决方案4】:
    $ var="a23;asd23;sdg3"
    $ echo $var | awk -F";" '{for(i=2;i<=NF;i++) $i=toupper(substr($i,i,1))substr($i,1) }1' OFS=";"
    a23;Sasd23;Gsdg3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-01
      • 2018-07-08
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多