Acredito que você precise usar as classes de caracteres baseadas em unicode. A classe com reconhecimento de localidade para caracteres de palavra é [:alnum:]
e isso é usado dentro da classe de caracteres, portanto, o comando seria
grep '[[:alnum:]]\{4\}' cyrillicstuff
e certifique-se de que sua localidade esteja configurada para a codificação na qual o arquivo realmente está. Você pode verificar com o comando locale
e procurar o valor que ele dá para a categoria LC_CTYPE
.
Esta sintaxe é suportada por todas as ferramentas que usam expressões regulares POSIX básicas ou estendidas como sed, awk etc. e também por perl e "expressões regulares compatíveis com perl" usadas por python e php. Perl e "expressões regulares compatíveis com perl" têm uma sintaxe adicional \pX
e \p{xxx}
, em que X
ou xxx
é um nome de categoria unicode, portanto \pL
é o mesmo que [:alpha:]
e \p{Uppercase}
deve ser o mesmo que [:upper:]
. Todas as categorias unicode devem ser utilizáveis.
Ad python. O Python também é perfeitamente unicode. No python 3 ele deve funcionar imediatamente, abrindo arquivos na codificação local parece ser o padrão (mas eu apenas procurei, não testei). No entanto, no python 2, você tem que especificar as codificações lá manualmente. Eles devem ser definidos para stdin, stdout e stderr, mas para todos os outros arquivos você deve usar a função codecs.open
e especificar a codificação obtida de locale.getpreferredencoding()
e inicializar os códigos de idioma como em C com locale.setlocale(locale.LC_ALL, '')
. / p>