【发布时间】:2012-11-14 15:25:07
【问题描述】:
我正在尝试从俄罗斯短篇小说中提取单词列表。
#!/bin/sh
export LC_ALL=ru_RU.utf8
sed -re 's/\s+/\n/g' | \
sed 's/[\.!,—()«»;:?]//g' | \
tr '[:upper:]' '[:lower:]' | \
sort | uniq
但是,tr 步骤不会将西里尔大写字母小写。我认为我使用可移植字符类很聪明!
$ LC_ALL=ru_RU.utf8 echo "Г" | tr [:upper:] [:lower:]
Г
如果相关,我通过从 Chrome 浏览器窗口复制粘贴到 Vim 中获得了俄语文本。它在屏幕上看起来很正确(Putty 终端)。这是在 Cygwin 的 bash shell 中——它应该与 Linux 上的 Bash 相同(应该!)。
什么是在管道中小写 unicode 文本的可移植、可靠的方法?
【问题讨论】:
-
与
sed的转换对我有用:echo 'СТЭК' | sed 's/[[:upper:]]*/\L&/' -
echo "Г" | tr [:upper:] [:lower:]在 Mac OS X 10.8 系统上正确输出“г”。 -
谢谢@LevLevitsky。这对我来说是一个合适的解决方案(随时将其推广为答案)。我想知道为什么 tr 不起作用。
-
@ulidtko 有意思,
tr是什么版本的? -
OSX tr 是 BSD tr。手册页说历史上 LC_ALL 被忽略了,现在不是了。我想这意味着支持 unicode。 developer.apple.com/library/mac/#documentation/Darwin/Reference/…