trを使用して大文字と小文字を区別するようにテキストを変更するにはどうすればよいですか?

trを使用して大文字と小文字を区別するようにテキストを変更するにはどうすればよいですか?

~によるとhttps://caseconverter.com/

「Capital」はこうしてすべての文字を大文字に変換します。

「小文字」は、以下のようにすべての文字を小文字に変換します。

「正しい大文字と小文字」は、次のように各単語の最初の文字が大文字で表示されるようにテキストを変換します。

「文章事例」。これにより、各文の最初の文字を大文字に置き換え、残りのテキストは小文字に変換します。したがって、各ピリオドの後の最初の文字は自動的に大文字に変換されます。

最初の2つはコマンドで簡単に実行できますtr

user@linux:~$ tr [:lower:] [:upper:] <<< eXaMPLe
EXAMPLE
user@linux:~$ 

user@linux:~$ tr [:upper:] [:lower:] <<< eXaMPLe
example
user@linux:~$ 

または

user@linux:~$ tr [a-z] [A-Z] <<< eXaMPLe
EXAMPLE
user@linux:~$ 

user@linux:~$ tr [A-Z] [a-z] <<< eXaMPLe
example
user@linux:~$ 

最後の2つの「定格ケース」と「文章ケース」はどうですか?

可能ですか?

もしそうなら教えてください。

そうでない場合、代替は何ですか?

ベストアンサー1

シェルがワイルドカードをfishサポートしていない限り、[...]これを引用する必要があります[:lower:][A-Z]それ以外の場合、シェルはそれを現在のディレクトリの一致するファイルのリストに拡張できます(一致しない場合はエラーを報告します)。

tr '[:lower:]' '[:upper:]'

その他の注意事項:

  • GNU実装はtrシングルバイト文字のみをサポートしているため、UTF-8ロケールは分音符なしで英語文字のみを大文字で表示します。
  • tr '[A-Z]' '[a-z]'大丈夫ですが、単にこれを行うこともできますtr A-Z a-z(POSIX準拠の実装では)。ただし、ABCDEFGHIJKLMNOPQRSTUVWXYZC/POSIX ロケールでのみ一致が保証されます。

GNU実装を使用して各単語の最初の文字を大文字で表示するには、sed次のようにします。

sed -E "s/[[:alnum:]_'-]+/\u&/g"

は含まれますが、'他の句読点は含まれません。-_foo-bar2baz,fooFoo-bar2baz,Foo

これはマルチバイト文字に対しては機能しますが、ほとんどのロケールでは文字を次のように処理しないため、通常は文字結合には機能しませんalnum

$ echo $'ste\u0301phane' | sed -E "s/[[:alnum:]_']+/\u&/g"
StéPhane

これを説明するためにに切り替えると、perl次のようになります\pM

$ echo $'ste\u0301phane chazelas' | perl -Mopen=locale -pe 's/[\w\pM'\''-]+/\u$&/g'
Stéphane Chazelas

また、これはfirst(最初の文字が合字 文字である)に変換されますFIrstucfirst()代わりにuc()/を使用すると、\uこの問題を回避できます。

$ echo 'first second' | perl -Mopen=locale -pe 's/[\w\pM'\''-]+/ucfirst$&/ge'
First Second

文章 大文字を使う場合はとても面倒です。テキストの先頭または文章の区切り記号(たとえば、..、、?... )、または文の紹介者(¿、、)の後の最初の文字を大文字として使用して、間にスペースを入れる必要があります。 、しかし、、、、、、、…)のような¡ものもあります。サポートする言語によっては、さらに考慮する必要があります。(["«

次のようにこれを実行できますperl

perl -0777 -C -pe 's/(^|[.!?…⁇⁈⁉¿¡])[\s([{"`‶‷«]*\K\p{Ll}/ucfirst$&/ge'

これはUTF-8ロケールと入力を前提としており、いくつかのケースのみを扱います。

とにかくこれは音訳だけtrではtr成し遂げられることではない。すべて文字を単に音訳と呼ぶことはできません。

おすすめ記事