角かっこを含む文字列を 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}

関連情報