Это должно работать для ваших нужд:
awk '/---/ {print buff; buff="";} /[^-]/{buff=buff" "$0}' filename
Вы также можете использовать блоки if-else:
awk '{if($0 ~ /---/){print buff; buff=""} else {buff=buff" "$0}}' filename
Также без использования буфера:
awk '{if($0 !~ /---/){printf "%s ", $0} else print ""}' filename
Этот ответ неверен, так как я думал, что принтер будет устройством PCI, но я неправильно понял. Параллельный порт уже есть в системе.
Хотя я не знаю истинной природы проблемы, вы можете надежно запускать собственный сценарий всякий раз, когда ядро Linux подключает/отключает устройства PCI через udev
, как описано здесь:(выдержка следует)
https://www.pcsuggest.com/run-shell-scripts-from-udev-rules
sudo nano /etc/udev/rules.d/40-switch_modem.rules
My custom rule looks like bellow
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1c9e", ATTR{idProduct}=="f000", RUN+="switch_modem.service"
где idVendor и idProduct доступны в выходных данных lspci и исходят от самого оборудования. Подсистема в вашем случае будет не USB. Возможные значения доступны в документах udev
.
В статье автор создал сценарий по своему выбору (вы, вероятно, захотите отправить новую строку на принтер один раз)
As directly running the script from a custom udev rule didn't worked, I had to create
a new systemd service to run the script through it, when the device is plugged in, a
USB modem in this case.
User created systemd service files are usually stored under /etc/systemd/system/,
I'm naming it switch_modem.service
sudo nano /etc/systemd/system/switch_modem.service
The systemd service file,
[Unit]
Description=4G modem switcher
[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/local/bin/switch_modem
[Install]
WantedBy=multi-user.target
Это гарантирует, что :-он будет запущен во время загрузки,непосредственно перед достижением цели multi-user
-он будет запускаться при каждом подключении -соответствующего оборудования
В udev
также была опция для предоставления собственного сценария, который будет вызываться при каждом подключении/отключении ЛЮБОГО устройства, где udev
будет передавать соответствующую информацию в виде параметров строки команды -или переменных среды. Этот вариант более гибкий, но и более сложный в реализации.