やりすぎです。ファイル構造を利用してシンプルに保ちましょう!
文字列 [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
デフォルトの印刷 (一種の常に真の状態)。