Anda berlebihan, manfaatkan struktur file Anda agar tetap sederhana!
Jika kita menemukan string [United dalam satu baris, menghurufbesarkan semuanya mulai dari kurung kurawal hingga akhir baris memberikan hasil yang Anda cari. Menerjemahkan ini ke dalam bahasa Sed,
sed '/\[United/s/].*/\U&/' file
Perhatikan bahwa hal di atas khusus untuk GNU Sed. Jika tidak tersedia tetapi dalam sistem POSIX, Anda dapat menggunakan Ex (atau lihat versi Awk αғsнιη) dengan sintaks serupa:
printf '%s\n' 'g/\[United/s/].*/\U&/' '%p' | ex file
Untuk menyimpan perubahan ke file alih-alih mencetak hasilnya, ubah %p ke x .
Menggunakan awk :
awk -F"[][]" '$2 ~/^United/ { $2="["$2"]"; $3=toupper($3); }1' OFS='' infile
dalam [...] kita mendefinisikan keduanya ] dan [ sebagai pemisah bidang lalu memeriksa bidang kedua jika dimulai dengan United teks, jika ya maka tambahkan kembali [] sekitar kolom kedua (saya berasumsi tidak ada kolom lain yang memiringkan karakter ini, jika tidak, kolom tersebut akan melewatkan ini); lalu kami mengonversi kolom ketiga menjadi nilai huruf besar; idiom 1 adalah pemicu awk cetak default (semacam kondisi yang selalu benar).