Планшет Wacom (интегрированный; X201T) отключается спорадически

Работает

Мы устанавливаем цикл do-while и продолжаем преобразовывать последний пробел, смежный с первым не пробелом, пока строка все еще имеет начальный космос.

sed -e '
   :loop
      /^ /s/ \([^ ]\|$\)/-\1/
   tloop
' filename.ext


while IFS= read -r l; do
   read -r ll <<<"$(printf '%ss\n' "$l")"
   printf '%s%s\n' \
      "$(seq -s= 0 "$(expr "$l" : '[   ]*')" | tr = - | tr -cd -)" \
      "${ll%?}"
done < filename.ext

Результат

-wqdq
-wqdqgrhehr
-cnkzjncicoajc
-hello space
----oejwfoiwejfow
----wqodojw
----more spaces
----more
----
-
--

Работа

  • Настройте цикл while для построчного чтения файла с IFS, установленным в NULL. Это имеет целью сохранить все пробелы в строке.
  • Затем выполните фиктивное чтение той же строки со значением по умолчанию IFS. Это обрежет все начальные пробелы. Мы добавляем фиктивный символ, не являющийся новой строкой, в конце, чтобы предотвратить свертывание завершающих строк новой строки на этапе расширения команды. Мы снимаем его во время печати.
  • Целью команды expr является определение количества совпадений, в нашем случае пробелов в начале строки.
  • Используя это число, мы генерируем последовательность тире с помощью команд seq и tr с соответствующей настройкой.
  • Наконец, мы печатаем тире вместе с обрезанной строкой, т. е. строкой, считываемой через IFS по умолчанию.
1
13.04.2017, 15:22
1 ответ

Попробуйте понизить версию ядра с 4.2.0 до, например, 3.19.

0
28.01.2020, 01:23

Теги

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