Xsi*_*Xsi 5 vim editors character-encoding text-processing regular-expression
使除第一个字母外的所有字母都小写。我更改后的第一个字母看起来像“大写”(从西里尔字母的大写)。其余(非大写)保持不变。
对不起,它是西里尔字母。例如?????????????
我发出了正确的一般命令:
:%s/\<\u\zs\u*/\L&/g
Run Code Online (Sandbox Code Playgroud)
它没有用
我的 linux 是 Gentoo,我的语言环境是 echo $LANG en_US.UTF-8。
我也试过:
%s/\<[?-?]\zs\[?-?][?-?]*...
Run Code Online (Sandbox Code Playgroud)
我不知道如何正确使用这种语法。我想它可能会起作用。
我不明白,即使之后
:se noic /[[:upper:]]
Run Code Online (Sandbox Code Playgroud)
不起作用。必须是语言环境的东西(我想知道)。
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
Run Code Online (Sandbox Code Playgroud)
尽管所有字母都与 Unicode 编号的大小相同。
我又重新检查了一遍:
file -bi geod.txt
text/plain; charset=utf-8
Run Code Online (Sandbox Code Playgroud)
所以 utf-8 没问题(尽管“文件”可能会出错)。
这是我的源文件:http : //bpaste.net/show/140967/
编辑:因为对于是否vim
或sed
应该使用存在一些混淆。我为两者提供解决方案:
以下替换用小写字符替换单词,第一个字母除外。单字母单词转换为大写。
:%s/\<\(\k\)\(\k*\)\>/\u\1\L\2/g
Run Code Online (Sandbox Code Playgroud)
\k
匹配字母数字字符和_
. 广泛使用\w
的等效[A-Za-z0-9_]
于西里尔字母,并且会在西里尔字母上失败。
的\<
和\>
抓住字边界和括号组匹配到的第一个字母,剩下的,正被使用检索\1
和\2
分别。
要使此模式起作用,您需要将 vim 设置为使用 UTF-8。
set encoding=utf-8
Run Code Online (Sandbox Code Playgroud)
sed 's/\b\([[:alpha:]]\)\([[:alpha:]]*\)\b/\u\1\L\2/g' <inputfile>
Run Code Online (Sandbox Code Playgroud)
\b
匹配 中的单词边界sed
,其余与vim
版本相同。(在 GNU sed 上测试,可能并非所有sed
版本都支持字符类。)