最初の文字を除くすべての文字を小文字にします。変更すると、最初の文字が「キャピタル」(キリル文字の大文字)のように見えました。残り(大文字を使用しない)は変更されません。
申し訳ありません。キリル文字です。たとえば、АБРАЗИЯ Абразия
私は正しい一般的なコマンドを出しました。
:%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@q
42回呼び出すことができます42@q
。この特定のマクロでは、何度も呼び出すことが安全なので、使用できます9999@q
。
別のパスは再帰マクロです。
qqqqqlguew@qq
qqq
-q
マクロ書き込みを開始した直後に書き込みを中止して、このレジスタを効果的にクリアします。@q
-q
今は空ですが、マクロを呼び出します。いいえマクロの記録を停止すると- 残りは上記のように動作します。
マクロは文書の最後の単語の終わりに達すると終了します(そのようなエラーが発生した場合は終了します。そうしないと永久に続きます)。