每行首字母大写

Capitalize first letter of each line

我有如下列表:

david
Sam
toNy
3matt
5$!john

我希望将每行中第一个出现的字母大写。因此,如果该行不是以字母开头,则转到下一个可能的字母并将大写。所以上面的例子应该输出:

David
Sam
ToNy
3Matt
5$!John

我尝试了以下方法,但如果该行以数字或符号开头,它不会将第一次出现的字母大写:

sed  's/^\(.\)/\U/' myfile.txt > convertedfile.txt

我已经在这个网站上搜索了答案,他们都给出了与上面那行相同的问题

您可以使用

sed 's/[[:alpha:]]/\U&/' myfile.txt > convertedfile.txt

这里,s/[[:alpha:]]/\U&/找到第一个字母(用[[:alpha:]]),用\U运算符大写(&代表整个匹配,匹配的字母).由于没有 /g 标志,因此只有第一次出现(每行)受到影响。

online demo

s='david
Sam
toNy
3matt
5$!john'
sed 's/[[:alpha:]]/\U&/' <<< "$s"

输出:

David
Sam
ToNy
3Matt
5$!John