LINUX.ORG.RU

Cut не принимает « в качестве разделителя.


0

0

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

cut: разделитель должен быть одним символом
Какого хрена? -этож один символ!Экранировать пробовал по всякому, да и не в этом дело.

Вобщем, почему и как надо?

★★

УМВР:

edigaryev@brick ~ $ cat test
123«abcdef«456
$ cat test | cut -d '«' -f1
123
$ cat test | cut -d '«' -f2
abcdef
$ cat test | cut -d '«' -f3
456
$ 

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

УМВР

А у меня нет.Ни в шелле, ни из файла.

вывод locale

Вот:

LANG=ru_RU.utf8
LC_CTYPE="ru_RU.utf8"
LC_NUMERIC="ru_RU.utf8"
LC_TIME="ru_RU.utf8"
LC_COLLATE="ru_RU.utf8"
LC_MONETARY="ru_RU.utf8"
LC_MESSAGES="ru_RU.utf8"
LC_PAPER="ru_RU.utf8"
LC_NAME="ru_RU.utf8"
LC_ADDRESS="ru_RU.utf8"
LC_TELEPHONE="ru_RU.utf8"
LC_MEASUREMENT="ru_RU.utf8"
LC_IDENTIFICATION="ru_RU.utf8"
LC_ALL=

nitz ★★
() автор топика

Похоже, у тебя cut, не адаптированный под многобайтовые кодировки:

разделитель должен быть одним символом

У меня, как оказалось, тоже. coreutils 6.10

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

Для Gentoo проблема решается сборкой coreutils с USE=«unicode».

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

У вас эта проблема на Gentoo?

Нет, нет - это в Убунте.

locale -a

C
en_AG
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_NG
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
POSIX
ru_RU.utf8
ru_UA.utf8

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

А хрен там.В Генте тоже самое.Хотя

[~]$ equery u coreutils
[ Legend : U - flag is set in make.conf       ]
[        : I - package is installed with flag ]
[ Colors : set, unset                         ]
 * Found these USE flags for sys-apps/coreutils-8.5:
 U I
 + + acl     : Adds support for Access Control Lists
 - - caps    : Use Linux capabilities library to control privilege
 - - gmp     : Adds support for dev-libs/gmp (GNU MP library)
 + + nls     : Adds Native Language Support (using gettext - GNU locale
               utilities)
 - - selinux : !!internal use only!! Security Enhanced Linux support, this must
               be set by the selinux profile or breakage will occur
 - - static  : !!do not set this during bootstrap!! Causes binaries to be
               statically linked instead of dynamically
 + + unicode : Adds support for Unicode
 - - vanilla : Do not add extra patches which change default behaviour; DO NOT
               USE THIS ON A GLOBAL SCALE as the severity of the meaning
               changes drastically
 - - xattr   : Adds support for extended attributes (filesystem-stored
               metadata)
cut --version
cut (GNU coreutils) 8.5

nitz ★★
() автор топика

> Вобщем, почему и как надо?

С точки зрения coreutils, символ и байт - это одно и то же. В UTF-8 это не так: « - это один символ, но два байта. В RedHat есть патч, который добавляет необходимую функциональность в coreutils (на основании «без этого патча невозможна сертификация по LSB путем прогона официальных тестов»), но разработчики coreutils считают, что он слишком грязный.

В общем, очередное доказательство незавершенности миграции на UTF-8.

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

В Gentoo пример работает.

locale -a

C POSIX en_US en_US.iso88591 en_US.utf8 ru_RU.utf8

locale

LANG=ru_RU.UTF-8 LC_CTYPE=ru_RU.UTF-8 LC_NUMERIC=ru_RU.UTF-8 LC_TIME=en_US.UTF-8 LC_COLLATE=C LC_MONETARY=«ru_RU.UTF-8» LC_MESSAGES=en_US.UTF-8 LC_PAPER=ru_RU.UTF-8 LC_NAME=ru_RU.UTF-8 LC_ADDRESS=ru_RU.UTF-8 LC_TELEPHONE=ru_RU.UTF-8 LC_MEASUREMENT=ru_RU.UTF-8 LC_IDENTIFICATION=ru_RU.UTF-8 LC_ALL=

paludis -q coreutils

.... installed: 8.4* {:0} .... Use flags: (acl) (caps) (-gmp) (nls) (-selinux) (-static) (unicode) (-vanilla) (xattr) Build Options: -trace

anonymous
()

У вас coreutils собраны без поддержки юникода. Воспользуйтесь awk. Работает, конечно, помедленнее, но зато работает:

> echo 123«abcdef«456 | awk -F« '{print $1}'
123

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

Какое «без»?Вывод equery выше посмотрите внимательней.«+»-флаг включён и пакет собран с ним.

Воспользоваться можно кучей утилит, что я и сделал даже до написания поста (sed-ом).Но непорядок же!

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

>Какое «без»?Вывод equery выше посмотрите внимательней.«+»-флаг включён и пакет собран с ним.
Сначала вы писали про убунту, про генту уже потом увидел.

Воспользоваться можно кучей утилит, что я и сделал даже до написания поста (sed-ом).Но непорядок же!

Да, непорядок. Некому, видать, поправить.

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

> А почему у edigaryev работает?

Потому что у него либо RedHat, либо LFS, либо другая система с патчем, либо локаль ru_RU.CP1251. В Gentoo патча нет (раньше был), а USE-флаг unicode ничего не делает.

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

Да, действительно - в 8.4 работает верно.

Что за идиотизм...Это даже регрессия получается.Вот вам и новые, исправленные и улучшенные версии приложений.

[решено], [лучи ненависти], [линукс не готов (даже не «для десктопа»)]

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