pvscan --activate: `Команда не принимает параметр: --activate ay.`

GNU sedработает с многобайтовыми символами. Итак:

$ echo é½Æ | sed 'y/é½Æ/ABŒ/'
ABŒ

Дело не столько в том, что GNU trне был интернационализирован, сколько в том, что он не поддерживает многобайтовые символы (например, не-ASCII в локалях UTF-8). GNU trбудет работать с Æ, Œ, если они будут однобайтовыми, как в наборе символов iso8859-15.

Подробнее об этом на Как сделать так, чтобы tr знал о символах, отличных от ascii (unicode)?

В любом случае, это не имеет ничего общего с Linux, это касается реализации trв системе. Использует ли эта система Linux в качестве ядра, или trпостроена для Linux, или использует API ядра Linux, не имеет значения, поскольку эта часть функциональности trвыполняется в пользовательском пространстве.

busybox trи GNU trчаще всего встречаются в дистрибутивах программного обеспечения, созданного для Linux, и не поддерживают многобайтовые символы, но есть и другие, которые были портированы. для Linux, как trнабора инструментов семейной реликвии (перенесенного из OpenSolaris) или ast-open, которые делают.

Обратите внимание, что sed's yне поддерживает диапазоны вроде a-z. Также обратите внимание, что если этот сценарий, содержащий sed 'y/é½Æ/ABŒ/', написан в кодировке UTF-8, он больше не будет работать должным образом, если вызывается в локали, где UTF-8 не используется. кодировка.

В качестве альтернативы можно использовать perl:

perl -Mopen=locale -Mutf8 -pe 'y/a-zé½Æ/A-ZABŒ/'

Выше код perl должен быть в UTF-8, но он будет обрабатывать ввод в кодировке локали (и выводить в той же кодировке). кодировка). При вызове в локали UTF-8 он транслитерирует UTF-8 Æ (0xc3 0x86) в UTF-8 Œ(0xc5 0x92) и в ISO8859-15 то же самое. но для 0xc6 -> 0xbc.

В большинстве оболочек наличие этих символов UTF-8 в одинарных кавычках должно быть приемлемым, даже если скрипт вызывается в локали, где UTF-8 не является кодировкой (исключением является yash, который пожаловаться, если эти байты не образуют допустимых символов в локали). Однако если вы используете не одинарные кавычки, а другие кавычки, это может вызвать проблемы. Например,

perl -Mopen=locale -Mutf8 -pe "y/♣\`/&'/"

не будет работать в локали, где используется кодировка BIG5-HKSCS, потому что кодировка \(0x5c) также содержится в некоторых других символах (например, α: 0xa3 0x5c, а кодировка UTF-8 заканчивается на 0xa3).

В любом случае, не ожидайте, что такие вещи, как

perl -Mopen=locale -Mutf8 -pe 'y/Á-Ź/A-Z/'

, помогут убрать острые акценты. Вышеупомянутое на самом деле просто

perl -Mopen=locale -Mutf8 -pe 'y/\x{c1}-\x{179}/\x{41}-\x{5a}/'

То есть диапазон основан на кодовых точках Unicode.Таким образом, диапазоны не будут полезны за пределами очень четко определенных последовательностей, которые находятся в порядке " right" в Unicode, например A-Z, 0-9.

Если вы хотите удалить острые ударения, вам придется использовать более продвинутые инструменты, такие как:

perl -Mopen=locale -MUnicode::Normalize -pe '
  $_ = NFKD($_); s/\x{301}//g; $_ = NFKC($_)'

То есть использовать формы нормализации Unicode для разложения символов, удалить острые ударения (здесь форма объединения U+0301 ) и перекомпоновать.

Еще одним полезным инструментом для транслитерации Unicode является uconvот ICU. Например, приведенное выше можно записать так:

uconv -x '::NFKD; \u0301>; ::NFKC;'

Хотя будет работать только с данными UTF-8. Вам потребуется:

iconv -t utf-8 | uconv -x '::NFKD; \u0301>; ::NFKC;' | iconv -f utf-8

Чтобы иметь возможность обрабатывать данные в локали пользователя.

0
12.09.2017, 08:20
1 ответ

Предложение по использованию справочной страницы предполагает, что --activateдопустимо только с--cache

pvscan --cache
       [ -b|--background ]
       [ -a|--activate ay ]
       [ -j|--major Number ]
       [    --minor Number ]
       [ COMMON_OPTIONS ]
       [ String|PV... ]
2
28.01.2020, 02:33

Теги

Похожие вопросы