Команда Linux для обрезки файла журнала

Команда Linux для обрезки файла журнала

У меня есть файл журнала с именем version.txt, и мне нужно отфильтровать все слова с ключевым словом (time=, вывод должен выглядеть следующим образом (time=451)и т. д.

Ниже приведены примеры записей из файла журнала. Выделил записи, которые хочу вывести в список. Если я вырежу или обрежу, то вместо слова будет напечатана вся строка (time=.

Предложите, пожалуйста, команду для перечисления слов, начиная с (time=числа и до конца ).

2020-03-10 06:48:20 [http-nio-7001-exec-7] INFO  [5e6770737be8a35b5fef38f7be2a2635] [5fef38f7be2a2635] [] c.l.e.i.a.c.ItemAvailabilityControllerImpl - DeliveryMethod(sosItmNbr=null, fullMtdTyp=3, fullMtdMsg=Delivery, fullCarrier=null, fullCarrierSvc=null, fullTransitMode=null, fullLctNbr=0, restMsg=null, isAvlSts=false, reqStates=[], onhandQty=0, totalQty=0, itmLdTmAvlQty=0, itmLdTm=null, itmConsolidationDate=null, itmLdTmDays=null, itmLdTmDaysLow=null, fullPath=null)])]) (time=451) 
2020-03-10 06:48:20 [http-nio-7001-exec-28] INFO  [5e677073e64bd99b5997b5bd20c3c4e0] [5997b5bd20c3c4e0] [] c.l.e.i.a.c.ItemAvailabilityControllerImpl - Finished availability process; Response: IAResponse(locationItemData=[ResponseItem(lctNbr=6877, itemNbr=10000070, modID=1500040, omniID=null, vbuNbr=14692, itmTypCode=3, reqQty=17, itemAvailList=[DeliveryMethod(sosItmNbr=null, fullMtdTyp=1, fullMtdMsg=Parcel, fullCarrier=null, fullCarrierSvc=null, fullTransitMode=null, fullLctNbr=0, restMsg=null, isAvlSts=false, reqStates=[], onhandQty=0, totalQty=0, itmLdTmAvlQty=0, itmLdTm=null, itmConsolidationDate=null,(time=455)
2020-03-10 06:48:20 [http-nio-7001-exec-46] INFO  [5e6770731c4e323f4cb875712bb0d8ee] [4cb875712bb0d8ee] [] c.l.e.i.a.c.ItemAvailabilityControllerImpl - Finised (time=492)

Вывод этого примера ввода должен выглядеть следующим образом:

(time=451)
(time=455)
(time=492)

решение1

Вопрос не совсем ясен.

Команда

grep -o '(time=[[:digit:]]*)' inputfile

с примером ввода из вопроса печатает

(time=451)
(time=455)
(time=492)

Отредактируйте, чтобы учесть дополнительные требования из комментария:

Добавление поля даты и времени из начала строк в вывод требует другой команды.

Если все строки ввода содержат (time=...)и начинаются с полей даты и времени, разделенных одинарными пробелами, вы можете использовать

sed 's/^\([-0-9]* [:0-9]* \).*\((time=[[:digit:]]*)\).*/\1\2/' inputfile

Это печатает

2020-03-10 06:48:20 (time=451)
2020-03-10 06:48:20 (time=455)
2020-03-10 06:48:20 (time=492)

Если есть другие несовпадающие строки, вы можете объединить их с тем же grepшаблоном, что и выше, но опустить -o.

grep '(time=[[:digit:]]*)' inputfile | sed 's/^\([-0-9]* [:0-9]* \).*\((time=[[:digit:]]*)\).*/\1\2/'

Обратите внимание, что шаблон поиска в моей sedкоманде не очень строгий.

Часть [-0-9]* [:0-9]*соответствует любому количеству цифр и тире в любой комбинации (дата), за которыми следует один пробел, любому количеству цифр и двоеточий (время), за которыми снова следует один пробел. Шаблон привязан к началу строки предшествующим ^.

Таким образом, он также будет соответствовать неправильным полям даты и времени, например, ---123--456- 9876:54321или даже двум пробелам в начале строки.

Связанный контент