LINUX.ORG.RU
ФорумAdmin

Некорректная работы cut

 , ,


0

1

Приветствую.

Столкнулся в Debian 10:

cut --version
cut (GNU coreutils) 8.30
lsblk -f | grep 'AAAABBBB'| awk '{print $1}'
└─sdd1

При попытке обрезать 2 первых символа - получаю нечитаемый символ:

lsblk -f | grep 'AAAABBBB'| awk '{print $1}' | cut -c 3-
�─sdd1

Предполагаю, что 2 по 3, поэтому:

lsblk -f | grep 'AAAABBBB'| awk '{print $1}' | cut -c 7-
sdd1

Результат достигнут. Но в другой системе (ROSA 11) всё сразу хорошо:

cut --version
cut (GNU coreutils) 8.24
lsblk -f | grep 'AAAABBBB'| awk '{print $1}' | cut -c 3-
sdd1

В чем может быть причина?


Потому что UTF-8. Число знаковых мест в консоли не всегда равно числу символов. Выполните где-нибудь strlen("└─") и запишите результат.

X512 ★★★★ ()

кроме указанного выше strlen можно еще использовать ключик -i у lspci и будут использоваться ascii символы. Или вообще отключить дерево с помощью ключа -l

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

Потому что UTF-8. Число знаковых мест в консоли не всегда равно числу символов.

Да, это я знаю.

Выполните где-нибудь strlen("└─") и запишите результат.

strlen("└─")
bash: синтаксическая ошибка рядом с неожиданным маркером «"└─"»
mexx ()
Ответ на: комментарий от X512

это ж надо было такую фигню придумать, вместо хранения длины строки каждый раз циклом ходить искать в ней ноль…

anonymous ()

Насколько я понял - разница в наложенной заплатке coreutils-8.24-i18n.patch, присутствующей в исходниках ROSA 11.

Но это не от ROSA, вроде. А от всего семейства RedHat.

Проверил в Fedora 33, cut version 8.32 - там тоже -c 3- работает как вы ожидаете.

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

Или вообще отключить дерево с помощью ключа -l

О, теперь и cut не нужен ) Благодарю.

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

Насколько я понял - разница в наложенной заплатке coreutils-8.24-i18n.patch … от всего семейства RedHat.

Понятно. Это объясняет «межсистемную» путаницу.

mexx ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.