単語の最初の文字を大文字にどのように置き換えますか。
Trouble me
Gold Rush brides
に
Trouble Me
Gold Rush Brides
この行はそれを行うべきです:
sed -e "s/\b\(.\)/\u\1/g"
awk
の使用:
awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }}1' file
出力は次のようになります。
Trouble Me
Gold Rush Brides
各Wordの最初の文字を大文字にするには、次のsedコマンドを使用します。
echo -e "Trouble me \nGold Rush brides" | sed -r 's/\<./\U&/g'
出力
Trouble Me
Gold Rush Brides
-r
スイッチは、拡張正規表現を使用するようにsed
に指示します。 sed
への指示は、「search and replace "(最初のs
)パターン\<.
とパターン\U&
globally 、つまり、すべての行のすべてのインスタンス(つまり、最後のg
修飾子)。私たちが探しているパターンは\<.
であり、これは Word境界 (\<
)の後に 任意の文字 (.
)を探しています。置換パターンは\U&
で、\U
はsed
に 次のテキストを大文字にする を指示し、&
は \0
の同義語 であり、「一致しました」。この場合、「一致したすべてのもの」は.
が一致したものにすぎません。Wordの境界は一致に含まれないためです(代わりにアンカーです)。 .
が一致するのは1文字だけなので、これは大文字です。
私にはアポストロフィがあったので、最初の解決策で作業しました...
mike@mike-laptop3:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed -e "s/\b\(.\)/\u\1/g"
ベストウェスタンプラスボブズイン
mike@mike-laptop3:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed "s/\( \|^\)\(.\)/\1\u\2/g"
ベストウエスタンプラスボブズイン
Sedを使用した別の短いバージョン:
sed -e "s/\b./\u\0/g"
私はあなたがsedと言ったのを知っていますが、シェルスクリプトの場合、私にとって最も簡単で柔軟性の高い方法の1つは、ほとんどのシステムで利用できるPythonを使用することでした。
_$ echo "HELLO WORLD" | python3 -c "import sys; print(sys.stdin.read().title())"
Hello World
_
例えば:
_$ lorem | python3 -c "import sys; print(sys.stdin.read().title())"
Officia Est Omnis Quia. Nihil Et Voluptatem Dolor Blanditiis Sit Harum. Dolore Minima Suscipit Quaerat. Soluta Autem Explicabo Saepe. Recusandae Molestias Et Et Est Impedit Consequuntur. Voluptatum Architecto Enim Nostrum Ut Corrupti Nobis.
_
strip()
などを使用してスペースを削除したり、capitalize()
を使用したりすることもできます。
_$ echo " This iS mY USER ${USER} " | python3 -c "import sys; print(sys.stdin.read().strip().lower().capitalize())"
This is my user jenkins
_
これまで提案されたsed
ソリューションは、元のテキストが小文字の場合にのみ機能します。 tr '[[:upper:]]' '[[:lower:]]'
入力を小文字に正規化するには、オールインワンのsed
ソリューションを使用すると便利です。
sed 's/\w\+/\L\u&/g'
これは単語(\w
はWord文字を意味し、\+
少なくとも1つ、次の非Word文字まで)、最後まで小文字(\L
)but次の(つまり最初の)文字を大文字(\u
)各(g
)一致式(&
)。
[ クレジット ]
sedとtrを併用:
name="athens"
echo $name | sed -r "s/^[[:alpha:]]/$(echo ${name:0:1} | tr [[:lower:]] [[:upper:]])/"
Bashの使用(sedを使用しないため、トピックから少し外れています):
msg="this is a message"
for Word in $msg
do
echo -n ${Word^} ""
done
This Is A Message