Comando de Linux para recortar un archivo de registro

Comando de Linux para recortar un archivo de registro

Tengo un archivo de registro llamado version.txt y necesito filtrar todas las palabras con palabras clave (time=y la salida debería verse así (time=451), etc.

A continuación se muestran las entradas de muestra del archivo de registro. Resalté las entradas que quiero enumerar. Si corto o recorto, imprime la línea completa en lugar de la palabra (time=.

Sugiera un comando para enumerar las palabras desde (time=el número hasta el cierre ).

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)

El resultado de esta entrada de ejemplo debería verse así

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

Respuesta1

La pregunta no está del todo clara.

El comando

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

con la entrada de ejemplo de las impresiones de preguntas

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

Edite para cubrir requisitos adicionales de un comentario:

Agregar el campo de fecha y hora desde el inicio de las líneas a la salida requiere un comando diferente.

Si todas las líneas de la entrada contienen (time=...)y comienzan con campos de fecha y hora separados por caracteres de espacio simple, puede usar

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

Esto imprime

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

Si hay otras líneas que no coinciden, puedes combinar esto con el mismo greppatrón que el anterior, pero omitirlo -o.

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

Tenga en cuenta que el patrón de búsqueda en mi sedcomando no es muy estricto.

La parte [-0-9]* [:0-9]*coincide con cualquier número de dígitos y guiones en cualquier combinación (la fecha) seguido de un solo espacio, cualquier número de dígitos y dos puntos (la hora) seguido nuevamente por un solo espacio. El patrón está anclado al inicio de la línea por el anterior ^.

Por lo tanto, también coincidiría con campos de fecha y hora incorrectos, como ---123--456- 9876:54321o incluso dos espacios al comienzo de la línea.

información relacionada