【问题标题】:Capitalize first letter of each line每行首字母大写
【发布时间】:2021-11-02 15:40:33
【问题描述】:

我有一个如下列表:

david
Sam
toNy
3matt
5$!john

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

David
Sam
ToNy
3Matt
5$!John

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

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

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

【问题讨论】:

标签: regex linux unix sed terminal


【解决方案1】:

你可以使用

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

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2015-01-25
    • 2021-07-29
    • 2011-05-14
    • 1970-01-01
    • 2016-12-05
    • 2015-11-10
    • 1970-01-01
    • 2021-07-23
    相关资源
    最近更新 更多