2010-10-06 18 views
9

cerco di capitalizzare la prima lettera in un file CSV che è ordinata in questo modo:BASH - Effettuare la prima lettera maiuscola

A23; asd23; sdg3

Quello che voglio è un output come questo

A23; Asd23; Sdg3

Quindi la prima stringa deve essere come è, ma il secondo e il terzo dovrebbero avere una prima lettera maiuscola. Ho provato con AWK e SED ma non ho trovato la soluzione giusta. Qualcuno può aiutare?

+0

Grazie a tutti. La risposta di Bart Sas si adatta perfettamente alle mie esigenze. :-) – fwaechter

risposta

17

Proprio capitilise tutte le lettere che seguono un punto e virgola:

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

Grazie. Era esattamente quello che ho cercato. :-) – fwaechter

+2

'\ E' non è necessario. – kev

+1

Alcune spiegazioni sono in ordine, dal momento che le espressioni regolari in 'sed' hanno le loro caratteristiche speciali. '\ U' converte tutti i caratteri a destra in maiuscolo,' & 'è (probabilmente) uguale a' \ 0', '\ E' interrompe inutilmente la conversione. Ecco un link un'altra risposta che lo spiega: http://stackoverflow.com/a/2762997/521032 – Septagram

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

a23;Asd23;Sdg3 
7

Bash (versione 4 e fino) ha un operatore di "prima maiuscola", ${var^}, ma in questo caso penso che sia meglio utilizzare sed:

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

Grazie per aver menzionato il '$ {var ^}', ha fatto il trucco per me! – lfxgroove

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 
Problemi correlati