Mac Bashの最後の文字を除いて、ファイル名から分離されたすべての「。」部分の最初の文字を大文字に変換します。

Mac Bashの最後の文字を除いて、ファイル名から分離されたすべての「。」部分の最初の文字を大文字に変換します。

ファイル拡張子を除いて、各ドット/ピリオドの後の最初の文字を大文字で表示するために、Mac Bashでファイル名を変更したいと思います。

  • 入力文字列の例:
    one.two.three.four.txt
    
  • 希望の出力:
    One.Two.Three.Four.txt
    

私は以下を試しました:

echo 'one.two.three.four.txt' | awk 'BEGIN{FS=OFS="."} NF==1{$1=toupper($1)} {for (i=1;i<NF;i++) $i=toupper($i)} 1'

しかし、結果は次のようになります。

ONE.TWO.THREE.FOUR.txt

したがって、拡張子を除くすべての項目を大文字にします。

最初の文字は大文字で、拡張子は小文字で探しています。

awkMac Bashでasを使用して解決策を見つけることはsed \U機能しません(これまでは機能しませんでした)。

事前にありがとう

ベストアンサー1

試みを変形して、次のことを行う必要があります。

echo "one.two.three.four.txt" |
     awk 'BEGIN{FS=OFS="."} {for (i=1;i<NF;i++) {$i=toupper(substr($i,1,1)) substr($i,2)}}1'

これにより、入力フィールドと出力フィールドの区切り文字が再びに設定されます.

次に、最後のフィールドを除くすべてのフィールドを繰り返し、各フィールドを最初の文字の大文字バージョン(substr()分離関数を使用)と残りの元のコンテンツ(再関数を使用substr())に再組み立てします。

最後に、すべての修正を含む現在の行を印刷します(これは1ルールブロックの外側で「さまよう」ように見えます)。


付録:コメントで指摘したように、OPは実際には初期資本だけでなく成熟資本の確保も望んでいます。首都- 分離された.部分、つまり以降のすべての文字も小文字で強制します。これは上記の手順を少し変更することで達成できます。

echo "one.two.tHREE.four.txt" |
     awk 'BEGIN{FS=OFS="."} {for (i=1;i<NF;i++) {$i=toupper(substr($i,1,1)) tolower(substr($i,2))}}1'

おすすめ記事