Stai esagerando, approfitta della struttura dei tuoi file per mantenerlo semplice!
Se troviamo la stringa [United
in una riga, mettendo in maiuscolo tutto, dalla parentesi graffa di chiusura alla fine della riga, si ottiene il risultato desiderato. Traducendolo in lingua Sed,
sed '/\[United/s/].*/\U&/' file
Si noti che quanto sopra è specifico di GNU Sed. Se non disponibile ma in un sistema POSIX, puoi usare Ex (o vedere la versione Awk di αғsнιη) con una sintassi simile:
printf '%s\n' 'g/\[United/s/].*/\U&/' '%p' | ex file
Per salvare le modifiche al file invece di stampare i risultati, modifica %p
a x
.
Usando awk
:
awk -F"[][]" '$2 ~/^United/ { $2="["$2"]"; $3=toupper($3); }1' OFS='' infile
entro [...]
abbiamo definito entrambi ]
e [
come separatore di campo quindi controllando il secondo campo se inizia con United
text, se sì allora aggiungi di nuovo []
intorno al secondo archiviato (presumo che non ci siano altre colonne che inclinino questi caratteri, altrimenti quei campi mancheranno questo); quindi convertiamo la terza colonna nel suo valore maiuscolo; l'idioma 1
è il trigger awk
default print (una specie di condizione sempre vera).