Estás exagerando, ¡aprovecha la estructura de tus archivos para mantenerlo simple!
Si encontramos la cadena [United
en una línea, escribir en mayúsculas todo, desde la llave de cierre hasta el final de la línea, da el resultado que busca. Traduciendo esto al lenguaje Sed,
sed '/\[United/s/].*/\U&/' file
Tenga en cuenta que lo anterior es específico de GNU Sed. Si no está disponible pero en un sistema POSIX, puede usar Ex (o ver la versión Awk de αғsнιη) con una sintaxis similar:
printf '%s\n' 'g/\[United/s/].*/\U&/' '%p' | ex file
Para guardar los cambios en el archivo en lugar de imprimir los resultados, cambie %p
a x
.
Usando awk
:
awk -F"[][]" '$2 ~/^United/ { $2="["$2"]"; $3=toupper($3); }1' OFS='' infile
dentro de [...]
definimos ambos ]
y [
como separador de campo y luego verificando contra el segundo campo si comienza con United
texto, si es así, vuelva a agregar []
alrededor del segundo campo (supongo que no hay otra columna que incline estos caracteres, de lo contrario, esos campos se perderán esto); luego convertimos la tercera columna a su valor en mayúsculas; el modismo 1
es activador awk
impresión predeterminada (una especie de condición siempre verdadera).