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


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

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

Оффлайн ReNzRv

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

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

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

Оффлайн Azure

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

Оффлайн ReNzRv

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

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

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 5665
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Цитата: 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.08 секунд. Запросов: 24.