#!/usr/bin/env bash # convert_text_case # ----------------- # Convierte el contenido de texto de un archivo aplicando transformaciones: # upper (mayúsculas), lower (minúsculas), lf (normalizar saltos a LF), # crlf (normalizar saltos a CRLF). # # USO: # source convert_text_case.sh # convert_text_case mode file [output_file] # # ARGUMENTOS: # mode Transformación a aplicar: upper|lower|lf|crlf (requerido) # file Archivo de entrada (requerido) # output_file Archivo de salida (opcional; por defecto imprime a stdout) convert_text_case() { local mode="${1:-}" local input_file="${2:-}" local output_file="${3:-}" # Validar argumentos requeridos if [[ -z "$mode" ]]; then echo "convert_text_case: modo requerido (upper|lower|lf|crlf)" >&2 return 1 fi if [[ -z "$input_file" ]]; then echo "convert_text_case: archivo de entrada requerido" >&2 return 1 fi if [[ ! -f "$input_file" ]]; then echo "convert_text_case: archivo no encontrado: ${input_file}" >&2 return 1 fi # Función auxiliar que aplica la conversión y escribe a stdout o archivo _apply_conversion() { local src="$1" local op="$2" case "$op" in upper) awk '{ print toupper($0) }' "$src" ;; lower) awk '{ print tolower($0) }' "$src" ;; lf) sed 's/\r$//' "$src" ;; crlf) sed 's/\r$//' "$src" | sed 's/$/\r/' ;; *) echo "convert_text_case: modo no soportado: ${op}. Usa: upper|lower|lf|crlf" >&2 return 1 ;; esac } if [[ -n "$output_file" ]]; then _apply_conversion "$input_file" "$mode" > "$output_file" echo "convert_text_case: ${input_file} → ${output_file} (modo: ${mode})" else _apply_conversion "$input_file" "$mode" fi } # Ejecutar si se invoca directamente if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then convert_text_case "$@" fi