2015-09-25 129 views
4

我试图做一个sed脚本,这将使每个Linux的sed脚本,使每个单词的第一个字母大写

molly w. bolt  334-78-5443 
walter q. bugg 984-49-0032 
noah p. way  887-12-0921 

的第一个字母所以我希望它看起来像这样:

Molly W. Bolt  334-78-5443 
Walter Q. Bugg 984-49-0032 
Noah P. Way  887-12-0921 

到目前为止,我有以下脚本,但它只会大写它遇到的前两个单词ie。使它成为Molly W. bolt。我无法弄清楚如何修改脚本以使姓氏变为大写。我需要添加什么?

h 
s/\(.\).*/\1/ 
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ 
G 
s/\(.\)\n\(.\)\(.*\)/\1\3/ 
/[a-z]/{ 
    h 
    s/\([A-Z][a-z]* \)\([a-z]\).*/\2/ 
    y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ 
    G 
    s/\(.\)\n\([A-Z][a-z]* \)\(.\)\(.*\)/\2\1\4/ 
} 

回答

5

这GNU sed的一个衬里可帮助您:

sed 's/\b./\u&/g' file 

测试与您的数据:

kent$ cat f 
molly w. bolt 334-78-5443 
walter q. bugg 984-49-0032 
noah p. way 887-12-0921 

kent$ sed 's/\b./\u&/g' f 
Molly W. Bolt 334-78-5443 
Walter Q. Bugg 984-49-0032 
Noah P. Way 887-12-0921 
+0

我该如何做到这一点一个脚本? – Joe

+0

@Joe只是把它放在你的脚本?不知道你的问题。 – Kent

4

使用单词边界\b\U为大写:

sed 's/\b./\U&/g'