lp -o sides=двусторонний-длинный-край 1.pdf не работает

Используя GNU sed, вы можете сделать это как:

sed -Ee '
   s/^/\n\n/
   s/\n\n/&\n/;s/[[:blank:]]+/\n/3;s/(.*)\n\n(.*)\n(.*)\n/\1\3\n\n\2/
   s|<_0:MsgUID>|\n|;s|</_0:MsgUID>|\n|;s/(.*)\n\n(.*)\n(.*)\n/\1 \3\n\n\2/
   s|<LoginName>|\n|;s|</LoginName>|\n|;s/(.*)\n\n(.*)\n(.*)\n/\1 \3\n\n\2/
   s|<_1:CustId>|\n|;s|</_1:CustId>|\n|;s/(.*)\n\n(.*)\n(.*)\n/\1 \3\n\n\2/
   s/\n\n.*//
' log.file

Пояснение

  • Мы помещаем маркер \n\nв начало строки. Все спички, найденные в строке, перебрасываются слева от этого маркера.
  • Сначала мы изолируем часть даты и времени, а затем перемещаем ее слева от маркера.
  • Во всех последующих шагах мы аналогичным образом изолируем интересующие теги,и бросьте значения тега слева от маркера.
  • Когда мы закончим, мы просто удалим все, что находится справа от маркера, включая маркер, и то, что останется в пространстве шаблона, будет тем, что нам нужно.
  • Примечание. :этот метод можно расширить, чтобы включить столько тегов, сколько вам нужно.

Результаты

03 Jun 2017/13:51:32:553 20150103135132968917 Userid 12345678

Другой способ — использование регулярных выражений Perl:

perl -lne '$,=$";
print /^(?:\S+\s+){2}\S+|<(?:_0:MsgUID|LoginName|_1:CustId)>\K(?:.*?)(?=<)/g' log.file

Здесь мы устанавливаемOFS$,на $", что равно space. Регулярное выражение perl /..../gвыведет все совпадения, отличные от -, в список, который затем будет разделен печатным пространством из-за уже установленного значения OFS.

1
20.10.2019, 20:24
1 ответ

Я до сих пор не знаю «почему», но я решил свою проблему, установив разрешение 612 x 792 -, и теперь команда lp для двусторонней печати работает.

1
28.04.2021, 23:28

Теги

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