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
따라서 줄 시작 부분의 공백 두 개와 같은 잘못된 날짜 및 시간 필드도 일치합니다 .