이것은 데이터입니다
10:43:19.538281|TraceDetail |UPBSStandardGenericBillPaymentComponent.PostBillPaymentTransaction|Total Time 19/06/2019 10:43:19.538281|TraceDetail |UPBSStandardGenericBillInquiryComponent.GetBillInquiry()|Total Time |2361748 | Consumer Number [0312122221212 ] , UCID [KLOJ0001] , Sending Time [10:43:17.8425459] Receive Time [10:43:18.4941158] Total Time [0:0:651] STAN is [345949]
출력하고 싶어요
[0312122221212 ]
[KLOJ0001]
[10:43:17.8425459]
[10:43:18.4941158]
[0:0:651]
[345949]
많은 명령을 시도했지만 다음 결과를 얻을 수 없습니다.
grep -oP 'Consumer Number \K.{26}|UCID \K.{10} |Sending Time \K.{09}|Receive Time \K.{09}|Total Time \\[ \K.{8}|STAN is \K.{8}' /root/Documents/a.txt
총 시간 없이 출력을 얻습니다.
[0312122221212 ]
[KLOJ0001]
[10:43:17.8425459]
[10:43:18.4941158]
[345949]
이 명령을 시도하면:
grep -oP 'Consumer Number \K.{26}|UCID \K.{10} |Sending Time \K.{09}|Receive Time \K.{09}|Total Time \K.{8}|STAN is \K.{8}' /root/Documents/a.txt
출력에 잘못된 값이 나타납니다.
19/06/
[0312122221212 ]
[KLOJ0001]
[10:43:17.8425459]
[10:43:18.4941158]
[0:0:651]
[345949]
답변1
간단히 다음을 사용할 수 있습니다.
grep -oP '\[.*?\]' /root/Documents/a.txt
\[
텍스트 일치[
.*?
탐욕스럽지 않은(게으른) 방식으로 문자 수에 관계없이 일치합니다.
\]
텍스트 일치]
이제 정규 표현식에 어떤 문제가 있는지 설명하겠습니다.
이것:
grep -oP 'Consumer Number \K.{26}|UCID \K.{10} |Sending Time \K.{09}|Receive Time \K.{09}|Total Time \\[ \K.{8}|STAN is \K.{8}' /root/Documents/a.txt
깨진: grep: missing terminating ] for character class
아마도 여기에 잘못 붙여넣은 것 같습니다... 확인해 보세요.
이:
grep -oP 'Consumer Number \K.{26}|UCID \K.{10} |Sending Time \K.{09}|Receive Time \K.{09}|Total Time \K.{8}|STAN is \K.{8}' /root/Documents/a.txt
수정 가능:
grep -oP 'Consumer Number \K.{29}|UCID \K.{10} |Sending Time \K.{09}|Receive Time \K.{09}|Total Time \K[^/ ]{9}|STAN is \K.{8}' /root/Documents/a.txt
그러나 이것이 최선의 접근 방식은 아니라는 점을 명심하십시오. 원래 정규 표현식의 문제점은 너무 허용적이라는 것입니다. 따라서 특정 일치 항목만 포함해야 한다는 것을 알고 있으면 원하지 않는 항목과 일치시킵니다. , [
, 및 , 사용하지 마세요... 너무 느슨해서 numbers
말이 안 됩니다. 예를 들어 다음과 같이 더 정확하게 설명하세요.space
]
.{29}
[][0-9 ]{29}