BASH - 将第一个字母大写

9

我想将一个按如下方式排序的CSV文件中的第一个字母大写:

a23;asd23;sdg3

我希望输出结果如下:

a23;Asd23;Sdg3

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


谢谢大家。Bart Sas的回答完美地满足了我的需求。 :-) - fwaechter
4个回答

17

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

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

谢谢。这正是我所寻找的。 :-) - fwaechter
1
需要解释一下,因为sed中的正则表达式有其自己的特殊功能。\U将右侧所有字符转换为大写,&\0(可能)相同,\E不必要地停止转换。这里有一个链接,另一个答案对此进行了解释:https://dev59.com/3nRB5IYBdhLWcg3wNk53#2762997 - Septagram

7

Bash(4及以上版本)具有“首字母大写”操作符${var^},但在这种情况下,我认为最好使用sed

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

1
谢谢你提到 ${var^},它对我很有帮助! - lfxgroove

1
$ 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

1
echo "a23;asd23;sdg3" | perl -ne 's/(?<=\W)(\w)/ uc($1) /gex;print $_'

a23;Asd23;Sdg3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接