4

重複の可能性:
シェル スクリプトでの小文字から大文字への文字変換

私は次のように価値があります:james,adam,john私はそれを作ろうとしていますJames,Adam,John(各名前の最初の文字は大文字にする必要があります)。

echo 'james,adam,john' | sed 's/\<./\u&/g'

すべてのシステムで機能しているわけではありません。あるシステムでは正常に表示されますが、別のシステムでは正常ではありません...

A="james adam john"
B=( $A )
echo "${B[@]^}"

いくつかの構文エラーがスローされます...だから、私は長いクエリsing whileループを使用していますが、これは長すぎます。これを行うショートカットの方法はありますか?

4

4 に答える 4

7

「名前の始まり」を定義する方法はたくさんあります。このメソッドは、単語境界の後の任意の文字を選択し、大文字に変換します。副作用として、これは「Sue Ellen」や「Billy-Bob」などの名前でも機能します。

echo "james,adam,john" | perl -pe 's/(\b\pL)/\U$1/g'
于 2012-09-05T19:56:58.457 に答える
3

Perl の場合:

echo "james,adam,john" | \
  perl -ne 'print  join(",", map{ ucfirst } split(/,/))'
于 2012-09-05T18:08:47.467 に答える
2

次のように awk を使用して、入力内のすべての単語の最初の文字を大文字にすることができます。

echo "james,adam,john" | awk 'BEGIN { RS=","; FS=""; ORS=","; OFS=""; }
{ $1=toupper($1); print $0; }'

出力

James,Adam,John
于 2012-09-05T18:25:50.360 に答える
1

TLPと同じ方法ですが、GNU sed を使用します。

echo "james,adam,john,sue ellen,billy-bob" | sed -r 's/\b(.)/\u\1/g'

出力:

James,Adam,John,Sue Ellen,Billy-Bob

最初の文字だけを大文字にする必要がある場合は、代わりにこれを使用します。

echo "james,adam,john,sue ellen,billy-bob" | sed 's/[^,]*/\u&/g'

出力:

James,Adam,John,Sue ellen,Billy-bob
于 2012-09-06T07:57:45.023 に答える