2012-04-09 22 views
6

Voglio convertire la prima lettera di ogni riga in minuscolo fino alla fine del file. Come posso farlo usando lo scripting di shell?Converti la prima lettera del file specificato in minuscolo

Ho provato questo:

plat=`echo $plat |cut -c1 |tr [:upper:] [:lower:]``echo $plat |cut -c2-` 

ma converte solo il primo carattere in minuscolo.

Il mio file è simile al seguente:

Apple 
Orange 
Grape 

Risultato atteso:

apple 
orange 
grape 

risposta

6

È possibile farlo con sed:

sed -e 's/./\L&/' Shell.txt 

(probabilmente più sicuro di fare

sed -e 's/^./\L&\E/' Shell.txt 

se mai vuole estendere questo)

+0

Grazie per la risposta rapida – Sijith

+0

Questo converte tutti i primi caratteri in lettere minuscole ma non sostituisce le vecchie stringhe di Caps nel file. È possibile controllare la tomaia e sostituire di conseguenza nello stesso file – Sijith

+0

Non capisco cosa intendi. Questo fa quello che dice la tua domanda: "converti la prima lettera di ogni riga in lettere minuscole fino alla fine del file" – Mat

2

Prova:.

plat=`echo $plat |cut -c1 |tr '[:upper:]' '[:lower:]'``echo $plat |cut -c2-` 
2

Pure Bash 4.0+, sostituzione di parametro:

>"$outfile"       # empty output file 
while read ; do 
    echo "${REPLY,}" >> "$outfile" # 1. character to lowercase 
done < "$infile" 
mv "$outfile" "$infile" 
0

Ecco un unico comando sed che utilizza solo Caratteristiche POSIX sed:

sed -e 'h;s,^\(.\).*$,\1,;y,ABCDEFGHIJKLMNOPQRSTUVWXYZ,abcdefghijklmnopqrstuvwxyz,;G;s,\ 
.,,' 

Queste sono due righe, la prima riga che termina in una barra rovesciata per citare il carattere di nuova riga.

Problemi correlati