대괄호가 포함된 문자열을 Grep합니다.

대괄호가 포함된 문자열을 Grep합니다.

이것은 데이터입니다

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}

관련 정보