키릴 알파벳의 첫 번째(대문자) 문자를 제외한 모든 문자를 소문자로 만듭니다.

키릴 알파벳의 첫 번째(대문자) 문자를 제외한 모든 문자를 소문자로 만듭니다.

첫 글자를 제외한 모든 글자를 소문자로 만듭니다. 변경하고 나니 첫 글자가 "capital"(키릴 문자의 대문자)처럼 보였습니다. 나머지(대문자 사용 안 함)는 변경되지 않습니다.

죄송합니다. 키릴 문자입니다. 예를 들어 АБРАЗИЯ Абразия

나는 올바른 일반 명령을 내렸습니다.

:%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

모든 문자의 유니코드 숫자는 동일한 크기입니다.

다시 확인했습니다.

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입니다.) - 한 글자 오른쪽으로 이동
  • gue-- gu현재 단어 끝까지 각 문자를 소문자(예: ) 로 지정( e)
  • w-- 다음 단어의 첫 문자로 이동
  • q-- 매크로 기록 중지

를 사용하여 매크로를 호출할 수 있습니다 @q. 9번 호출하거나 9@q42번 호출할 수 있습니다 42@q. 이 특정 매크로의 경우 여러 번 호출해도 안전하므로 를 사용할 수 있습니다 9999@q.

또 다른 경로는 재귀 매크로입니다.

qqqqqlguew@qq
  • qqq-- q매크로 기록을 시작한 후 즉시 기록을 중지하여 이 레지스터를 효과적으로 지웁니다.
  • @q-- q지금은 비어 있지만 매크로를 호출합니다.아니요매크로 기록을 중지하면
  • 나머지는 위와 같이 동작합니다.

매크로는 문서의 마지막 단어 끝에 도달하면 종료됩니다(그러한 오류가 발생하면 종료됩니다. 그렇지 않으면 영원히 계속됩니다).

관련 정보