ログファイルをトリミングする 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=...)日付と時刻のフィールドが含まれ、1つのスペース文字で区切られて始まる場合は、

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]*、任意の数の数字とダッシュの任意の組み合わせ (日付) の後に 1 つのスペースが続き、任意の数の数字とコロン (時刻) の後に再び 1 つのスペースが続くものに一致します。パターンは、先行する . によって行の先頭に固定されます^

---123--456- 9876:54321そのため、間違った日付と時刻のフィールドや、行の先頭の 2 つのスペースにも一致します。

関連情報