キリルアルファベットの最初の(大文字)文字を除くすべての文字を小文字にします。

キリルアルファベットの最初の(大文字)文字を除くすべての文字を小文字にします。

最初の文字を除くすべての文字を小文字にします。変更すると、最初の文字が「キャピタル」(キリル文字の大文字)のように見えました。残り(大文字を使用しない)は変更されません。

申し訳ありません。キリル文字です。たとえば、АБРАЗИЯ Абразия

私は正しい一般的なコマンドを出しました。

:%s/\<\u\zs\u*/\L&/g

しかし役に立たない

私のLinuxはGentooで、私のロケールはecho $LANG en_US.UTF-8です。

私も次のことを試しました。

 %s/\<[А-Я]\zs\[А-Я][а-я]*...

この構文を正しく使用する方法がわかりません。私の考えにはこれが効果があると思います。

分からないが、その後も

:se noic /[[:upper:]] 

動作しません。ロケール問題のようです(気になります)。

sed -n '322p' geod.txt | cut -f 1 -d " " 
АВГИТИТ—
sed -n '322p' geod.txt | cut -f 1 -d " " | xxd
0000000: d090 d092 d093 d098 d0a2 d098 d0a2 e280

すべての文字のUnicode番号は同じサイズです。

もう一度確認しました。

file -bi geod.txt
text/plain; charset=utf-8

したがって、utf-8を使用するのは問題ありません(ただし、「ファイル」が間違っている可能性があります)。

これは私のソースファイルです。 http://bpaste.net/show/140967/

答え1

編集する:vim使用すべきか、使用すべきかについてsed少し混乱があるからです。私は次の両方のソリューションを提供します。

ウィム

次の置換は単語を小文字(最初の文字を除く)に置き換えます。単一文字の単語は大文字に変換されます。

:%s/\<\(\k\)\(\k*\)\>/\u\1\L\2/g

\k英数字と と一致します_。広く使用されている対応する\w文字は[A-Za-z0-9_]キリル文字ですが、キリル文字では失敗します。

\<単語の境界を特定すると、角かっこ\>グループは最初の文字と残りの文字と一致し、それぞれとを\1使用して検索されます\2

このモードが機能するには、vimがUTF-8を有効にする必要があります。

set encoding=utf-8

sed 's/\b\([[:alpha:]]\)\([[:alpha:]]*\)\b/\u\1\L\2/g' <inputfile>

\b一致する単語の境界sed、残りはバージョンと同じですvim。 (GNU sedでテストされており、文字クラスはsedすべてのバージョンでサポートされていない可能性があります。)

答え2

これは正規表現を使用して行うことができ、従来の答えではその方法をかなりよく扱っていますが、他の方法があります。

単一の単語の場合は、単語の最初の文字に移動して次を使用します。

lgue

複数の単語を実行するにはマクロを使用する必要があります。

qqlguewq

私はこれを分析します:

  • qq- 名前付きメッセージの録音を開始します。q
  • l(小文字Lです。) - 1文字右に移動
  • gue-gu現在の単語の終わりまでの各文字を小文字(例:)で指定(e
  • w- 次の単語の最初の文字に移動
  • q- マクロ記録の停止

を使用してマクロを呼び出すことができます@q。 9回呼び出すか9@q42回呼び出すことができます42@q。この特定のマクロでは、何度も呼び出すことが安全なので、使用できます9999@q

別のパスは再帰マクロです。

qqqqqlguew@qq
  • qqq-qマクロ書き込みを開始した直後に書き込みを中止して、このレジスタを効果的にクリアします。
  • @q-q今は空ですが、マクロを呼び出します。いいえマクロの記録を停止すると
  • 残りは上記のように動作します。

マクロは文書の最後の単語の終わりに達すると終了します(そのようなエラーが発生した場合は終了します。そうしないと永久に続きます)。

関連情報