%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%EC%A0%9C%EC%99%B8%ED%95%9C%20%EB%AA%A8%EB%91%90%20%EC%86%8C%EB%AC%B8%EC%9E%90.png)
첫 글자를 제외한 모든 글자를 소문자로 만듭니다. 변경한 후 첫 번째 문자는 "대문자"처럼 보입니다(키릴 문자의 대문자에서). 나머지(대문자 아님)는 변경되지 않습니다.
죄송하지만 키릴 문자로 되어 있어요. 예: АБРАЗИЯ Абразия
나는 올바른 일반 명령을 내렸습니다.
:%s/\<\u\zs\u*/\L&/g
그리고 그것은 작동하지 않았습니다
내 리눅스는 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
모든 문자는 유니코드 번호 매기기의 크기와 동일합니다.
다시 한번 확인해 봤습니다:
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
.
이 패턴이 작동하려면 UTF-8을 사용하도록 vim을 설정해야 합니다.
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) -- 한 문자 오른쪽으로 이동gue
-- 모든 문자를 소문자( 즉gu
)로 현재 단어의 끝(e
) 으로 바꿉니다.w
-- 다음 단어의 첫 문자로 이동q
-- 매크로 기록을 중지합니다.
로 매크로를 호출할 수 있습니다 @q
. 로 9번 호출하거나 9@q
로 42번 호출할 수 있습니다 42@q
. 이 특정 매크로를 사용하면 임의의 횟수만큼 호출하는 것이 안전하므로 9999@q
.
또 다른 경로는 재귀 매크로입니다.
qqqqqlguew@qq
qqq
--q
매크로 기록을 시작한 후 즉시 기록을 중지하여 해당 레지스터를 효과적으로 비웁니다.@q
--q
지금은 비어 있지만 매크로 를 호출합니다.~ 아니다매크로 기록을 중단하면- 나머지 부분은 위와 같이 동작합니다.
매크로가 문서의 마지막 단어 끝에 도달하면 종료됩니다(해당 종류의 오류가 발생하는 경우와 마찬가지로 종료됩니다. 그렇지 않으면 영원히 계속됩니다).