Linux指令來修剪日誌文件

Linux指令來修剪日誌文件

我有一個名為 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行首的兩個空格。

相關內容