Mat*_*ins -1 regex unix linux terminal sed
我有一个如下所示的列表:
david
Sam
toNy
3matt
5$!john
Run Code Online (Sandbox Code Playgroud)
我希望将每行中第一次出现的字母大写。因此,如果该行不以字母开头,则转到下一个可能的字母并将其变为大写。所以上面的例子应该输出:
David
Sam
ToNy
3Matt
5$!John
Run Code Online (Sandbox Code Playgroud)
我已尝试以下操作,但如果该行以数字或符号开头,则它不会将第一次出现的字母大写:
sed 's/^\(.\)/\U\1/' myfile.txt > convertedfile.txt
Run Code Online (Sandbox Code Playgroud)
我已经在这个网站上搜索了答案,它们都给出了与上面一行相同的问题
您可以使用
sed 's/[[:alpha:]]/\U&/' myfile.txt > convertedfile.txt
Run Code Online (Sandbox Code Playgroud)
在这里,s/[[:alpha:]]/\U&/
找到第一个字母(带有[[:alpha:]]
),并用运算符将其大写\U
(&
代表整个匹配,匹配的字母)。由于没有/g
标志,因此只有第一次出现(每行)受到影响。
请参阅在线演示:
s='david
Sam
toNy
3matt
5$!john'
sed 's/[[:alpha:]]/\U&/' <<< "$s"
Run Code Online (Sandbox Code Playgroud)
输出:
David
Sam
ToNy
3Matt
5$!John
Run Code Online (Sandbox Code Playgroud)