Vous en faites trop, profitez de votre structure de fichiers pour faire simple !
Si nous trouvons la chaîne [United
dans une ligne, tout mettre en majuscule, de l'accolade fermante à la fin de la ligne, donne le résultat que vous recherchez. Traduisant ceci en langage Sed,
sed '/\[United/s/].*/\U&/' file
Notez que ce qui précède est spécifique à GNU Sed. S'il n'est pas disponible mais dans un système POSIX, vous pouvez utiliser Ex (ou voir la version Awk d'αғsнιη) avec une syntaxe similaire :
printf '%s\n' 'g/\[United/s/].*/\U&/' '%p' | ex file
Pour enregistrer les modifications dans le fichier au lieu d'imprimer les résultats, modifiez %p
à x
.
Utilisation de awk
:
awk -F"[][]" '$2 ~/^United/ { $2="["$2"]"; $3=toupper($3); }1' OFS='' infile
dans [...]
nous avons défini les deux ]
et [
comme séparateur de champs puis en vérifiant par rapport au deuxième champ s'il commence par United
texte, si oui alors rajouter []
autour du deuxième fichier (je suppose qu'il n'y a pas d'autre colonne inclinant ces caractères, sinon ces champs manqueront cela); puis nous convertissons la troisième colonne en sa valeur majuscule ; l'idiome 1
est le déclencheur awk
impression par défaut (une sorte de condition toujours vraie).