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).