Соединение строк текста с повторяющимся началом цифрами

Драйвер представляет собой модуль ядра Linux.

Загрузите исходный код ядра linux, посмотрите код существующих драйверов фреймбуфера вdrivers/video/fbdev(github здесь)и документацию вDocumentation/fb(github). Google для учебников, как писать модули ядра, сначала потренируйтесь с простым модулем.

Простого сопоставления памяти будет недостаточно, вам придется реализовать несколько ioctlс.

Написание драйверов ядра — непростая задача. Если вам приходится задавать подобные вопросы (, а вы задавали их много за последние несколько дней ), вы, вероятно, не сможете это сделать.

X — это сервер для протокола X. Он может использовать оборудование через модули ядра DRM, а также может использовать оборудование через драйверы кадрового буфера (с fbdevX-драйвером ). Подробности об этом легко найти в сети, погуглить. /dev/fb0— это устройство кадрового буфера, поэтому вам не нужно беспокоиться о X или DRM.

-3
28.12.2020, 09:12
1 ответ

Как написано в моем комментарии, я чувствую, что ваш пример не соответствует вашему объяснению, но я предполагаю, что вы на самом деле ищете что-то вроде

sed 'H;x;s/\(\n[0-9]*\)\(\n.*\)*\1\(.*\)$/\1\3\2/;h;$!d;s/^\n//

Идея состоит в том, чтобы собрать все строки в области хранения и проверить, начинается ли последняя строка с идентификатора, который у нас уже был ранее:

  • H;xозначает, что мы добавляем все строки в пространство хранения, а затем обмениваем пространство хранения и пространство шаблонов. Обратите внимание, что это помещает полезную новую строку в начало
  • .
  • s/\(\n[0-9]*\)\(\n.*\)*\1\(.*\)$/\1\3\2/находит строку идентификатора (, состоящую только из цифр ), и проверяет, соответствует ли последняя добавленная строка этому идентификатору. Если да, переместите оставшуюся часть строки за идентификатор. *позади `(\n.) кажется ерундой, но необходим для обработки случая, когда линия IP может находиться сразу за линией ID.
  • h;$!dсохраняет строку обратно в область удержания и продолжает со следующей строки без вывода
  • s/^\n//окончательно удаляет начальную новую строку ;x;s/ (\n[0 -9])(\n.)\1 ([0 -9.] *)/\1\3\2/;x;$!d;g;s/^\n//'

Обновление для расширенных регулярных выражений

Если вы хотите использовать расширенные регулярные выражения (вариант -E, как и в вашем вопросе ), синтаксис будет

sed 'H;x;s/(\n[0-9]*)(\n.*)*\1(.*)$/\1\3\2/;h;$!d;s/^\n//

, но обратите внимание, что обратные ссылки(\1)не являются частью стандарта POSIX ERE, поэтому они могут быть реализованы не всеми разновидностями sed.

0
18.03.2021, 22:40

Теги

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