Одно решение со скриптом bash:
for i in $(<input); do [ ${#i} -le 3 ] && printf '%s:%s\n' $ip $i || ip=$i; done
Это сохраняет IP-адрес в переменной, если длина входной строки превышает 3 символа, и печатает ip:port
в противном случае. Замените input
вашим входным файлом. (Вы можете выбрать большее значение, если номера ваших портов содержат более 3 символов)
Еще один:
while read i; do [ ${i/.} != $i ] && ip=$i || printf "%s:%s\n" $ip $i; done <input
Это присваивает IP-адрес переменной ip
, если она содержит точку, и печатает ip:port
в противном случае.
Общий подход заключается в отправке объектного файла, содержащего проприетарный код, и «прокладки», предоставляемой в виде исходного кода, который при необходимости перестраивается для соответствующих ядер. Код интерфейса обрабатывает весь интерфейс модуля для ядра, включая импорт символов со строками версий и т. д.
Например, драйверы NVIDIA содержат файл nv-kernel.o
, который предоставляется только в виде двоичного файла и заканчивается в модуле ядра.