Использование команды sed /unix для замены даты (ггггммдд )между

После долгой борьбы с этим (около месяца )я обнаружил, что в основном lpr/CUPS какая-то поврежденная логика мозга, которая приводит к сбою при работе с сетевыми принтерами. Проблема заключается во всей парадигме «отключено/включено» принтера, из-за которой принтер становится непригодным для использования, как только lpr становится непонятным, что неизбежно произойдет в какой-то момент. Так как пользователь должен иметь привилегии суперпользователя для диагностики подобных проблем, lpr практически непригоден для использования кем-либо в среде рабочей группы с непривилегированными пользователями -.

Я решил свою проблему, написав короткую программу на C, которая подключается к IP-адресу принтера через порт 9100, открывает файл PCL для печати только для чтения, копирует файл в сокет подключения, затем закрывает соединение и файл. Это работает безупречно каждый раз для меня. Итак, в основном используйте любые возможности программирования, которые у вас есть, если вы хотите напечатать необработанный файл. Возможно, вы даже могли бы сделать это в bash или csh.

-1
21.02.2020, 07:35
1 ответ

Следующая команда 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 )и замените это и все последующее, вплоть до расширения имени файла, но исключая его, при условии, что после даты в имени файла есть только один литерал .. Это выполняется путем принятия «всего, кроме .ноль или более раз»([^.]*)в заменяемом выражении.

1
28.04.2021, 23:22

Теги

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