Насколько я понимаю, выражение [a-z] означает любую малую (строчную) английскую букву от a до z. Правильно? Соответственно [^a-z] означает любую букву кроме 26 малых от a до z. Выражение [A-Za-z] в grep и sed означает любую английскую букву, а команда sed 's/[^A-Za-z]//g' удалит из потока все символы кроме английских букв и концов строк. Русские эквиваленты: [А-Яа-яЁё] и 's/[^А-Яа-яЁё]//g'. Всё пока правильно?
Так вот, у меня в локали ru_RU.UTF-8 это не работает. Команда
dd if=/dev/urandom bs=102400 count=1 | iconv -c -f ucs2 -t utf-8 | sed 's/[^A-Za-z]//g' > random.txt
Проблема в том, что английские символы — 1-байтные, а в потоке преобладают многообайтные? Если заменить на русские буквы:
dd if=/dev/urandom bs=102400 count=1 | iconv -c -f ucs2 -t utf-8 | sed 's/[^А-Яа-яЁё]//g' > random.txt
Если попробовать фильтровать не sed-ом, а grep-ом, результаты будут такие же.
Проблема у меня в системе, или в grep и sed? Как можно сделать такой фильтр помимо перечисления всех возможных символов?
Заранее спасибо.