我有一个名为 version.txt 的日志文件,需要过滤掉所有带有关键字的单词(time=
,输出应该类似于(time=451)
等。
以下是日志文件中的示例条目。突出显示我想要列出的条目。如果我确实剪切或修剪它会打印整行而不是 word (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
行首的两个空格。