LINUX.ORG.RU

cut и русские символы

 ,


0

1

Привет!

В общем, никак не могу придумать, как заставить cut «понимать» русские символы. Банальный

 echo тест | cut -c 1 

Выводит у меня букву N с ~ наверху.

Спасибо!

Ответ на: комментарий от geekless

О, нашел по-лучше вариант:

echo $"{ПЕРЕМЕННАЯ:ПОЗИЦИЯ:СИМВОЛОВ ПОСЛЕ ПОЗИЦИИ}"

Тему считаю решенной.

alozovskoy ★★★★★ ()

Поставь heirloom toolchest. Не пользуйся coreutils для работы с текстом за пределами plain ASCII сырцов/конфигов/логов. Репорть баги, но их заигнорят.

x3al ★★★★★ ()
Ответ на: комментарий от x3al

Не, считаю лучше использовать как можно больше из того, что в ОС из коробки - меньше проблем если придется запускать скрипты на чужой машине.

alozovskoy ★★★★★ ()
Ответ на: комментарий от x3al

Лучше поставить 9base и воспользоваться awk'ом, у него всё хорошо с юникодом.

quantum-troll ★★★★★ ()
Ответ на: комментарий от alozovskoy

использовать как можно больше из того, что в ОС из коробки

Питон везде из коробки, используй его.

anonymous ()

Сломали ЛОР.

anonymous ()
Ответ на: комментарий от anonymous

Не знаю его. Да и код на shell интуитивно понятен любому, кто shell использует.

alozovskoy ★★★★★ ()

Какая система и версия coreutils? УМВР что на RFRemix 18 с cut (GNU coreutils) 8.17, что на CentOS 5.8 с cut (GNU coreutils) 5.97

dexpl ★★★★★ ()
Ответ на: комментарий от dexpl

Debian testing, версию coreutils пока посмотреть не могу - не за ПК с сабжевой проблемой, но он соответствует дистрибутиву.

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

Да и код на shell интуитивно понятен любому

Охлол, а питон при этом не интуитивно понятен? Интересно, почему я смог осилить питон, но так и не осилил толком шелл скрипты.

anonymous ()
Ответ на: комментарий от anonymous

Давай пример на питоне тех вариантов решения проблемы на shell, которые я привел ITT, вместе и посмотрим, что интуитивно понятнее.

alozovskoy ★★★★★ ()
Ответ на: комментарий от Homura_Akemi

[0:1]

Это неочевидная фигота! Ты бы ему еще s[0:1:1] привел в качестве примера.

anonymous ()
Ответ на: комментарий от Homura_Akemi

Мне не ясно как это использовать. Ты либо скрипт мне покажи, либо как непосредственно в оболочке это выглядит. А еще круто если для двух переменных покажешь. И как это в смеси с shell-кодом будет работать.

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

Ты либо скрипт мне покажи

#!/usr/bin/env python
s="test"
print(s[0:1])

А еще круто если для двух переменных покажешь.

А конкретнее?

И как это в смеси с shell-кодом будет работать.

???

Homura_Akemi ()
Ответ на: комментарий от Homura_Akemi

???

Он хочет замену cut.

$ echo "123
234
abc" | python -c "import sys; print '\n'.join(x[:1] for x in sys.stdin)"
1
2
a

anonymous ()
Ответ на: комментарий от Homura_Akemi

А, спасибо, ну в принципе то же самое, что и на bash, особой разницы нет.

alozovskoy ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Ну эт мы знаем, но не все такие классные. Только тут проблема основная не в локали а (мне кажется так логичнее) в самом cut.

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

Проблема именно в локали. cut отрезает 1 байт, а локаль у тебя говнистая.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

man cut:

       -b, --bytes=LIST
              select only these bytes

       -c, --characters=LIST
              select only these characters

Нафига ж ему тогда два разных ключа под одно действие? Да и логичнее глянуть в лоаль для того, чтоб узнать вес символа.

alozovskoy ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Вообщет на счет локали я определенно согласен, использование однобайтной было бы проще, но это - не решение проблемы.

alozovskoy ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Проблема именно в локали.

Проблема именно в cut, авторы которого давно не смотрели на календарь.

Homura_Akemi ()
Ответ на: комментарий от alozovskoy

Нафига ж ему тогда два разных ключа под одно действие?

Подозреваю, что под bytes подразумевается еще и вывод непечатных символов.

Да и логичнее глянуть в лоаль для того, чтоб узнать вес символа.

Понапридумывают всякого говна, и мучайся потом из-за них…

Вообщет на счет локали я определенно согласен, использование однобайтной было бы проще, но это - не решение проблемы.

Решение. Вот если бы ты еще попробовал что-нибудь попрограммировать, то понял бы, что таки лучше юникод не использовать там, где он явно не нужен.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Homura_Akemi

При чем здесь календарь?

Просто авторам cut надо в мане приписать: «с китайскими иероглифами программа не работает»

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Это где так? У меня на двух Gentoo, и в одной Ubuntu — «▒». Что интересно, на третьей Gentoo — «�» (если не отобразится — в первом случае шахматное заполнение пикселями, во втором — вопросик)

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73
locale
LANG=ru_RU.koi8-r
LC_CTYPE="ru_RU.koi8-r"
LC_NUMERIC=C
LC_TIME="ru_RU.koi8-r"
LC_COLLATE="ru_RU.koi8-r"
LC_MONETARY="ru_RU.koi8-r"
LC_MESSAGES="ru_RU.koi8-r"
LC_PAPER="ru_RU.koi8-r"
LC_NAME="ru_RU.koi8-r"
LC_ADDRESS="ru_RU.koi8-r"
LC_TELEPHONE="ru_RU.koi8-r"
LC_MEASUREMENT="ru_RU.koi8-r"
LC_IDENTIFICATION="ru_RU.koi8-r"
LC_ALL=
Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

При чем здесь календарь?

При том, что нынче уже не модно считать, что один символ это один байт.

Жаль, что в 9base нет cut, но хоть tr юникодный есть.

Homura_Akemi ()
Ответ на: комментарий от Eddy_Em

прикинулся шлангом

А ты молодец :3

anonymous ()
Ответ на: комментарий от Eddy_Em

Понапридумывают всякого говна, и мучайся потом из-за них…

Тут спорно. Тоже можно сказать, типо «пользовали бы все юникод, небыло бы такой ерунды». Вообще нужно стремиться к одному стандарту, я так считаю, а то мы так и будем пись^Wлокалями мерятся. Да и что будет, если твои кои использовать ам, где их физически нет?

Вот если бы ты еще попробовал что-нибудь попрограммировать, то понял бы, что таки лучше юникод не использовать там, где он явно не нужен.

Ты о том, что я больше памяти займу? Это реально критично в наше время?? А там, где это действительно важно, зачем мне вообще кириллица?

alozovskoy ★★★★★ ()
Ответ на: комментарий от alozovskoy

Вообще нужно стремиться к одному стандарту, я так считаю

Согласен: КОИ8 для России.

Ты о том, что я больше памяти займу? Это реально критично в наше время?? А там, где это действительно важно, зачем мне вообще кириллица?

Не только, а еще о том, что хрена с два ты по-человечески сможешь строки обрабатывать!

Eddy_Em ☆☆☆☆☆ ()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от KRoN73

В КОИ8 нет символа №:

12.12.08 11:28 ~
chartable 

 32 [0x20] -  	 64 [0x40] - @	 96 [0x60] - `	128 [0x80] - ─	160 [0xa0] - ═	192 [0xc0] - ю	224 [0xe0] - Ю	
 33 [0x21] - !	 65 [0x41] - A	 97 [0x61] - a	129 [0x81] - │	161 [0xa1] - ║	193 [0xc1] - а	225 [0xe1] - А	
 34 [0x22] - "	 66 [0x42] - B	 98 [0x62] - b	130 [0x82] - ┌	162 [0xa2] - ╒	194 [0xc2] - б	226 [0xe2] - Б	
 35 [0x23] - #	 67 [0x43] - C	 99 [0x63] - c	131 [0x83] - ┐	163 [0xa3] - ё	195 [0xc3] - ц	227 [0xe3] - Ц	
 36 [0x24] - $	 68 [0x44] - D	100 [0x64] - d	132 [0x84] - └	164 [0xa4] - ╓	196 [0xc4] - д	228 [0xe4] - Д	
 37 [0x25] - %	 69 [0x45] - E	101 [0x65] - e	133 [0x85] - ┘	165 [0xa5] - ╔	197 [0xc5] - е	229 [0xe5] - Е	
 38 [0x26] - &	 70 [0x46] - F	102 [0x66] - f	134 [0x86] - ├	166 [0xa6] - ╕	198 [0xc6] - ф	230 [0xe6] - Ф	
 39 [0x27] - '	 71 [0x47] - G	103 [0x67] - g	135 [0x87] - ┤	167 [0xa7] - ╖	199 [0xc7] - г	231 [0xe7] - Г	
 40 [0x28] - (	 72 [0x48] - H	104 [0x68] - h	136 [0x88] - ┬	168 [0xa8] - ╗	200 [0xc8] - х	232 [0xe8] - Х	
 41 [0x29] - )	 73 [0x49] - I	105 [0x69] - i	137 [0x89] - ┴	169 [0xa9] - ╘	201 [0xc9] - и	233 [0xe9] - И	
 42 [0x2a] - *	 74 [0x4a] - J	106 [0x6a] - j	138 [0x8a] - ┼	170 [0xaa] - ╙	202 [0xca] - й	234 [0xea] - Й	
 43 [0x2b] - +	 75 [0x4b] - K	107 [0x6b] - k	139 [0x8b] - ▀	171 [0xab] - ╚	203 [0xcb] - к	235 [0xeb] - К	
 44 [0x2c] - ,	 76 [0x4c] - L	108 [0x6c] - l	140 [0x8c] - ▄	172 [0xac] - ╛	204 [0xcc] - л	236 [0xec] - Л	
 45 [0x2d] - -	 77 [0x4d] - M	109 [0x6d] - m	141 [0x8d] - █	173 [0xad] - ╜	205 [0xcd] - м	237 [0xed] - М	
 46 [0x2e] - .	 78 [0x4e] - N	110 [0x6e] - n	142 [0x8e] - ▌	174 [0xae] - ╝	206 [0xce] - н	238 [0xee] - Н	
 47 [0x2f] - /	 79 [0x4f] - O	111 [0x6f] - o	143 [0x8f] - ▐	175 [0xaf] - ╞	207 [0xcf] - о	239 [0xef] - О	
 48 [0x30] - 0	 80 [0x50] - P	112 [0x70] - p	144 [0x90] - ░	176 [0xb0] - ╟	208 [0xd0] - п	240 [0xf0] - П	
 49 [0x31] - 1	 81 [0x51] - Q	113 [0x71] - q	145 [0x91] - ▒	177 [0xb1] - ╠	209 [0xd1] - я	241 [0xf1] - Я	
 50 [0x32] - 2	 82 [0x52] - R	114 [0x72] - r	146 [0x92] - ▓	178 [0xb2] - ╡	210 [0xd2] - р	242 [0xf2] - Р	
 51 [0x33] - 3	 83 [0x53] - S	115 [0x73] - s	147 [0x93] - ⌠	179 [0xb3] - Ё	211 [0xd3] - с	243 [0xf3] - С	
 52 [0x34] - 4	 84 [0x54] - T	116 [0x74] - t	148 [0x94] - ■	180 [0xb4] - ╢	212 [0xd4] - т	244 [0xf4] - Т	
 53 [0x35] - 5	 85 [0x55] - U	117 [0x75] - u	149 [0x95] - ∙	181 [0xb5] - ╣	213 [0xd5] - у	245 [0xf5] - У	
 54 [0x36] - 6	 86 [0x56] - V	118 [0x76] - v	150 [0x96] - √	182 [0xb6] - ╤	214 [0xd6] - ж	246 [0xf6] - Ж	
 55 [0x37] - 7	 87 [0x57] - W	119 [0x77] - w	151 [0x97] - ≈	183 [0xb7] - ╥	215 [0xd7] - в	247 [0xf7] - В	
 56 [0x38] - 8	 88 [0x58] - X	120 [0x78] - x	152 [0x98] - ≤	184 [0xb8] - ╦	216 [0xd8] - ь	248 [0xf8] - Ь	
 57 [0x39] - 9	 89 [0x59] - Y	121 [0x79] - y	153 [0x99] - ≥	185 [0xb9] - ╧	217 [0xd9] - ы	249 [0xf9] - Ы	
 58 [0x3a] - :	 90 [0x5a] - Z	122 [0x7a] - z	154 [0x9a] -  	186 [0xba] - ╨	218 [0xda] - з	250 [0xfa] - З	
 59 [0x3b] - ;	 91 [0x5b] - [	123 [0x7b] - {	155 [0x9b] - ⌡	187 [0xbb] - ╩	219 [0xdb] - ш	251 [0xfb] - Ш	
 60 [0x3c] - <	 92 [0x5c] - \	124 [0x7c] - |	156 [0x9c] - °	188 [0xbc] - ╪	220 [0xdc] - э	252 [0xfc] - Э	
 61 [0x3d] - =	 93 [0x5d] - ]	125 [0x7d] - }	157 [0x9d] - ²	189 [0xbd] - ╫	221 [0xdd] - щ	253 [0xfd] - Щ	
 62 [0x3e] - >	 94 [0x5e] - ^	126 [0x7e] - ~	158 [0x9e] - ·	190 [0xbe] - ╬	222 [0xde] - ч	254 [0xfe] - Ч	
 63 [0x3f] - ?	 95 [0x5f] - _	127 [0x7f] - 	159 [0x9f] - ÷	191 [0xbf] - ©	223 [0xdf] - ъ	255 [0xff] - Ъ	

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

В КОИ8 нет символа №

А как ты думаешь, зачем я его вставил в пример? :)

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

А как ты думаешь, как я в консольку воткну №?

Твой пример вот во что превращается:

echo <<тест No1>> | cut -c 1
bash: syntax error near unexpected token `|'

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

А как ты думаешь, как я в консольку воткну №?

Да никак. Я потому пример и привёл, показывая проблемы кодировки, совершенно недопустимые в XXI веке :)

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

Нет никаких проблем: в документах-то я спокойно этот символ вставляю (\No)

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

А если документ придётся скриптом обработать?

KRoN73 ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Зачем?

Ну, мне, например, часто приходится :) А если тебе не нужно, то тем более зачем с KOI8 извращаться?

KRoN73 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.