Un truco rápido con el comando Unix tr, vamos a convertir las letras mayúsculas a minúsculas de un fichero.
Fichero test.txt:
$ cat test.txt minusculas MAYUSCULAS
Convertir mayúsculas en minúsculas del fichero test.txt:
$ cat test.txt | tr [:upper:] [:lower:] minusculas mayusculas
Convertir minúsculas en mayúsculas del fichero test.txt:
$ cat test.txt | tr [:lower:] [:upper:] MINUSCULAS MAYUSCULAS
Por supuesto, el comando tr nos ofrece muchas más opciones para transformación de carácteres, os dejo la ayuda del comando, recordad que en las páginas man hay mucha más información.
$ tr --help Modo de empleo: tr [OPCIÓN]... CONJUNTO1 [CONJUNTO2] Traducir, comprimir, y/o borrar caracteres de la entrada estándar, escribiendo a la entrada estándar. -c, -C, --complement primer compliment SET1 -d, --delete borrar caracteres en SET1, no traducir -s, --squeeze-repeats reemplazar cada secuencia de entradas de un caracter repetido esta es una lista de SET1 con una sóla coincidencia de ese caracter -t, --truncate-set1 primero truncar SET1 a la longitud de SET2 --help muestra esta ayuda y finaliza --version informa de la versión y finaliza Los CONJUNTOs se especifican como cadenas de caracteres. La mayoría se representan a sí mismos. Las secuencias válidas son las siguientes: \NNN carácter con valor octal NNN (de uno a tres dígitos) \\ barra invertida \a pitido audible (BEL) \b espacio hacia atrás \f salto de página \n salto de línea \r retorno de carro \t tabulación horizontal \v tabulación vertical CAR1-CAR2 todos los caracteres comprendidos entre CAR1 y CAR2 contados en orden ascendente [CAR*] en CONJUNTO2, copias de CAR hasta que se alcance la longitud de CONJUNTO1 [CAR*REPITE] copia REPITE veces CAR; REPITE es octal si comienza con 0 [:alnum:] todas las letras y dígitos [:alpha:] todas las letras [:blank:] todos los espacios en blanco horizontales [:cntrl:] todos los caracteres de control [:digit:] todos los dígitos [:graph:] todos los caracteres imprimibles, sin incluir el espacio [:lower:] todas las letras minúsculas [:print:] todos los caracteres imprimibles, incluyendo el espacio [:punct:] todos los caracteres de puntuación [:space:] todos los espacios en blanco horizontales y verticales [:upper:] todas las letras mayúsculas [:xdigit:] todos los números hexadecimales [=CAR=] todos los caracteres que son igual que CAR Se produce la traducción si no se especifican CONJUNTO1 y CONJUNTO2, siempre y cuando no aparezca la opción -d. -t se puede usar sólo al traducir. CONJUNTO2 se expande a la longitud de CONJUNTO1, repitiendo su último carácter tantas veces como sea necesario. Los caracteres que sobran en CONJUNTO2 no se tienen en cuenta. Solamente se garantiza que [:lower:] y [:upper:] sean expandidos en orden ascendente; si se usa en CONJUNTO2 al traducir, sólo se pueden usar en parejas, para especificar conversión a mayúsculas. -s usa CONJUNTO1 si no se está traduciendo ni borrando; si no, la compresión usa CONJUNTO2 después de la traducción o el borrado.
Simple y muy funcional :)