我想将一个按如下方式排序的CSV文件中的第一个字母大写:
a23;asd23;sdg3
我希望输出结果如下:
a23;Asd23;Sdg3
因此,第一个字符串应该保持不变,但是第二个和第三个字符串的第一个字母应该大写。我尝试使用AWK和SED,但是没有找到正确的解决方案。有人可以帮忙吗?
我想将一个按如下方式排序的CSV文件中的第一个字母大写:
a23;asd23;sdg3
我希望输出结果如下:
a23;Asd23;Sdg3
因此,第一个字符串应该保持不变,但是第二个和第三个字符串的第一个字母应该大写。我尝试使用AWK和SED,但是没有找到正确的解决方案。有人可以帮忙吗?
将分号后面的所有字母大写:
sed -e 's/;./\U&\E/g'
sed
中的正则表达式有其自己的特殊功能。\U
将右侧所有字符转换为大写,&
与\0
(可能)相同,\E
不必要地停止转换。这里有一个链接,另一个答案对此进行了解释:https://dev59.com/3nRB5IYBdhLWcg3wNk53#2762997 - SeptagramBash(4及以上版本)具有“首字母大写”操作符${var^}
,但在这种情况下,我认为最好使用sed
:
sed -r 's/(^|;)(.)/\1\U\2/g' <<< "a23;asd23;sdg3"
${var^}
,它对我很有帮助! - lfxgroove$ 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
echo "a23;asd23;sdg3" | perl -ne 's/(?<=\W)(\w)/ uc($1) /gex;print $_'
a23;Asd23;Sdg3