Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Проблема ограничения длины строк текста с русскими буквами  (Прочитано 1030 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ReNzRv

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Нужно ограничить макс. длину строк в текстовых файлах до заданого значения в символах.
Ограничение должно выполнятся переносом по словам (пробелам) на новую строку части строки длинее n символов.

Есть решения с помощью fold, awk, sed, cut, но проблема в том, что все они считают русскую букву за 2 символа (байта), и выполнение ограничения выполняется неверно:
Строки только с русскими буквами становятся в два раза короче от заданой длины.
Если указать значение в два раза больше, то строки с другими символами становятся длинее заданой длины.

Есть ли решение?
« Последнее редактирование: 28 Сентября 2016, 22:55:56 от renzrv »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
sed (как и awk) нормально распознает кириллицу
Код: (bash) [Выделить]
sed '/.\{60,\} /s/\(.\{,60\}\) /\1\n/;P;D'
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ReNzRv

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Код: (bash) [Выделить]
sed '/.\{60,\} /s/\(.\{,60\}\) /\1\n/;P;D'То что надо, отлично работает. Благодарю.

Под неправильным выполнением я имел ввиду такие примеры:
Код: (bash) [Выделить]
sed L112(длина=112)
Код: (bash) [Выделить]
awk '{print length($0)}' <<<'абвгд'
Код: (bash) [Выделить]
cut -c-2 <<<'абвгд'

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Цитата: info sed
`L N'
     This GNU `sed' extension fills and joins lines in pattern space to produce output lines of (at most) N characters, like `fmt' does; if N is omitted, the default as specified on the command line is used.  This command is considered a failed experiment and unless there is enough request (which seems unlikely) will be removed in future versions.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.05 секунд. Запросов: 25.