やりすぎです。ファイル構造を利用してシンプルに保ちましょう!
文字列 [United が見つかった場合 行では、右中括弧から行末まですべてを大文字にすると、目的の結果が得られます。これをセド語に翻訳すると、
sed '/\[United/s/].*/\U&/' file
上記はGNU Sedに固有のものであることに注意してください。利用できないが POSIX システムである場合は、同様の構文で Ex を使用できます (または Awk バージョンを参照してください):
printf '%s\n' 'g/\[United/s/].*/\U&/' '%p' | ex file
結果を出力する代わりに変更をファイルに保存するには、%p を変更します。 x まで .
awk の使用 :
awk -F"[][]" '$2 ~/^United/ { $2="["$2"]"; $3=toupper($3); }1' OFS='' infile
[...]以内 ] の両方を定義しました そして [ フィールドセパレーターとして、2 番目のフィールドが United で始まるかどうかをチェックします テキスト、はいの場合は [] を追加します 2番目のフィールドの周り(これらの文字を傾ける列は他にないと思います。そうしないと、これらのフィールドはこれを見逃します)。次に、3 列目を大文字に変換します。イディオム 1 トリガー awk デフォルトの印刷 (一種の常に真の状態)。