2015-09-25 127 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'