키릴 문자로 유닉스 도구를 사용하는 방법은 무엇입니까?

키릴 문자로 유닉스 도구를 사용하는 방법은 무엇입니까?

저는 최근에 키릴 문자 작업을 시작했는데 정말 어렵습니다.

나는 그것을 사용하기 위해 내 Python 스크립트를 얻을 수 없습니다. 나는 전에 시도했다.

PHP는 잘 작동하지만 PHP를 모릅니다. 겨우 뭔가를 정리했지만 여전히 마음이 편하지 않았습니다. (그러나 놀라울 정도로 유용하다는 것이 입증되었기 때문에 주류가 될 수 있습니다.)

물론 grep이것은 불가능하다.

아니면 그럴까요?

이것이 이 질문의 목적입니다.

나는 이것을하고 싶다 :

alec@ROOROO:~/$ grep '\w\{4\}' cyrillicstuff

...그리고는 빈손으로 떠났습니다.

하지만 모두 키릴 문자이기 때문에 좋은 'ol grep을 사용하여 4자 이상의 모든 단어를 반환할 수 있는 방법이 있습니까?

답변1

유니코드 기반 문자 클래스를 사용해야 한다고 생각합니다. 단어 문자에 대한 로케일 인식 클래스는 [:alnum:]문자 클래스 내부에서 사용되므로 명령은 다음과 같습니다.

grep '[[:alnum:]]\{4\}' cyrillicstuff

그리고 로케일이 파일이 실제로 사용하는 인코딩으로 설정되어 있는지 확인하세요. locale명령을 사용하여 LC_CTYPE범주에 제공되는 값을 검사하고 찾을 수 있습니다.

이 구문은 POSIX 기본 또는 확장 정규식(예: sed, awk 등)을 사용하는 모든 도구와 Python 및 PHP에서 사용되는 Perl 및 "Perl 호환 정규식"에서 지원됩니다. perl 및 "perl 호환 정규식"에는 추가 구문 \pX및 가 있습니다 \p{xxx}. 여기서 X또는 xxx는 유니코드 범주 이름이므로 는 \pL와 동일 [:alpha:]하고 와 \p{Uppercase}동일해야 합니다 [:upper:]. 모든 유니코드 카테고리를 사용할 수 있어야 합니다.


광고 파이썬. Python은 유니코드도 완벽하게 지원합니다. 즉시 작동해야 하는 Python 3에서는 로케일 인코딩으로 파일을 여는 것이 기본값인 것 같습니다(그러나 테스트하지 않고 방금 확인했습니다). 하지만 Python 2에서는 인코딩을 수동으로 지정해야 합니다. stdin, stdout 및 stderr에 대해 설정해야 하지만 다른 모든 파일에 대해서는 이 codecs.open함수를 사용해야 하며 여기서 가져올 인코딩을 지정 locale.getpreferredencoding()하고 locale.setlocale(locale.LC_ALL, '').

관련 정보