2010-10-06 126 views
9

我試圖利用在CSV的第一個字母,其排序是這樣的:BASH - 讓第一個字母大寫

A23; asd23; sdg3

我要的是像一個輸出這

A23; Asd23; Sdg3

所以第一個字符串應該是原樣,但第二個和第三個應該有一個大寫的第一個字母。我嘗試過使用AWK和SED,但是我找不到合適的解決方案。有人可以幫忙嗎?

+0

謝謝大家。 Bart Sas的答案符合我的需求。 :-) – fwaechter 2010-10-06 12:34:37

回答

17

只是capitilise遵循分號的所有字母:

sed -e 's/;./\U&\E/g' 
+0

謝謝。那正是我所搜索的。 :-) – fwaechter 2010-10-06 12:33:47

+2

'\ E'不需要。 – kev 2011-10-11 06:55:24

+1

有些解釋是爲了順序,因爲'sed'中的正則表達式有它們自己的特殊功能。 '\ U'將所有字符右移爲大寫,'&'可能(與'\ 0'相同),'\ E'不必要的停止轉換。這裏有一個鏈接解釋它的另一個答案:http://stackoverflow.com/a/2762997/521032 – Septagram 2013-06-03 12:39:41

1
echo "a23;asd23;sdg3" | perl -ne 's/(?<=\W)(\w)/ uc($1) /gex;print $_' 

a23;Asd23;Sdg3 
7

擊(4版本及以上)有一個「第一大寫」操作符,${var^},但在這種情況下,我覺得這是更好地使用sed

sed -r 's/(^|;)(.)/\1\U\2/g' <<< "a23;asd23;sdg3" 
+1

感謝提到'$ {var ^}',它爲我做了詭計! – lfxgroove 2013-04-10 16:23:37

1
$ var="a23;asd23;sdg3" 
$ echo $var | awk -F";" '{for(i=2;i<=NF;i++) $i=toupper(substr($i,i,1))substr($i,1) }1' OFS=";" 
a23;Sasd23;Gsdg3 
相關問題