После долгой борьбы с этим (около месяца )я обнаружил, что в основном lpr/CUPS какая-то поврежденная логика мозга, которая приводит к сбою при работе с сетевыми принтерами. Проблема заключается во всей парадигме «отключено/включено» принтера, из-за которой принтер становится непригодным для использования, как только lpr становится непонятным, что неизбежно произойдет в какой-то момент. Так как пользователь должен иметь привилегии суперпользователя для диагностики подобных проблем, lpr практически непригоден для использования кем-либо в среде рабочей группы с непривилегированными пользователями -.
Я решил свою проблему, написав короткую программу на C, которая подключается к IP-адресу принтера через порт 9100, открывает файл PCL для печати только для чтения, копирует файл в сокет подключения, затем закрывает соединение и файл. Это работает безупречно каждый раз для меня. Итак, в основном используйте любые возможности программирования, которые у вас есть, если вы хотите напечатать необработанный файл. Возможно, вы даже могли бы сделать это в bash или csh.
Следующая команда sed
должна выполнить задачу:
sed 's/20[0-9]\{2\}\(0[1-9]\|1[012]\)\([012][0-9]\|3[01]\)[^.]*/*/'
Если ваш sed
понимает опции -r
или -E
, вы можете обойтись без большинства обратных косых черт:
sed -r 's/20[0-9]{2}(0[1-9]|1[012])([012][0-9]|3[01])[^.]*/*/'
Это будет искать шаблон "ГГГГММДД" с некоторыми проверками правдоподобия (только годы между 2000 и 2099, месяцы в диапазоне от 01 -12, дни в диапазоне от 01 -31 )и замените это и все последующее, вплоть до расширения имени файла, но исключая его, при условии, что после даты в имени файла есть только один литерал .
. Это выполняется путем принятия «всего, кроме .
ноль или более раз»([^.]*
)в заменяемом выражении.