キーワードをキャプチャするときに新しい行のデータを収集する方法は?

キーワードをキャプチャするときに新しい行のデータを収集する方法は?

共通キーワードP00001121を含む次の例行を含むファイルがあります。

[H00,P00001121] CHANNEL__OPEN:TCP_ADDRESS='10.32.130.202' TCP_PORT='80'"
[H00,P00001121] COMMS_QUEUING:RECV='01/08/2019 14:33:45.064410' QUEUE_TIME='00000.000' TO_DEV='
[H00,P00001121] FROM_EXCHANGE:HTTP/1.1 200 OK\r\n
Server: Apache-Coyote/1.1\r\n
Content-Type: text/xml;charset=UTF-8\r\n
Content-Length: 878\r\n
Date: Thu, 01 Aug 2019 04:33:45 GMT\r\n
\r\n
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>
[H00,P00001121] CONTEXT=PARAMETER : CLIENTID =>
[H00,P00001121] CONTEXT=PARAMETER : TRANSACTIONID => 20190801143344970"
[H00,P00001121] CONTEXT=PARAMETER : KEY_TYPE => SERVICEID
[H00,P00001121] CONTEXT=PARAMETER : ORDERSOURCESYSTEM =>

キーワード(P00001121)を含むすべての行と、キーワードの下に\ r \ nを含む数行(\ r \ nを含む1行または\ r \ nを含む10行がある可能性があります)をキャプチャしたい。キーワードを含むファイルのすべての行には、\ r \ nを含む次の行が含まれます。 grep、awk、cutなど、どのコマンドでも機能するコマンドを使用できます。

[Server: Apache-Coyote/1.1\r\n
Content-Type: text/xml;charset=UTF-8\r\n
Content-Length: 878\r\n
Date: Thu, 01 Aug 2019 04:33:45 GMT\r\n
\r\n
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>]

ベストアンサー1

OPのテキスト入力(コメント参照)を確認した後、次のように正しい形式の元のテキストを取得できました。

[H00,P00001121] CHANNEL__OPEN:TCP_ADDRESS='10.32.130.202' TCP_PORT='80'"
[H00,P00001121] COMMS_QUEUING:RECV='01/08/2019 14:33:45.064410' QUEUE_TIME='00000.000' TO_DEV='
[H00,P00001121] FROM_EXCHANGE:HTTP/1.1 200 OK\r\n
Server: Apache-Coyote/1.1\r\n
Content-Type: text/xml;charset=UTF-8\r\n
Content-Length: 878\r\n
Date: Thu, 01 Aug 2019 04:33:45 GMT\r\n
\r\n

[H00,P00001121] CONTEXT=PARAMETER : CLIENTID =&gt;
[H00,P00001121] CONTEXT=PARAMETER : TRANSACTIONID =&gt; 20190801143344970"
[H00,P00001121] CONTEXT=PARAMETER : KEY_TYPE =&gt; SERVICEID
[H00,P00001121] CONTEXT=PARAMETER : ORDERSOURCESYSTEM =&gt;

テキストが次のようになるとします(提供されたテキストを更新するために編集後の回答を更新します)。

これを行うことができます(テキスト入力の名前が指定されたと仮定)。ex1

cat ex1 | grep -P '\\r\\n|P00001121' 

あなたは得るでしょう:

[H00,P00001121] CHANNEL__OPEN:TCP_ADDRESS='10.32.130.202' TCP_PORT='80'"
[H00,P00001121] COMMS_QUEUING:RECV='01/08/2019 14:33:45.064410' QUEUE_TIME='00000.000' TO_DEV='
[H00,P00001121] FROM_EXCHANGE:HTTP/1.1 200 OK\r\n
Server: Apache-Coyote/1.1\r\n
Content-Type: text/xml;charset=UTF-8\r\n
Content-Length: 878\r\n
Date: Thu, 01 Aug 2019 04:33:45 GMT\r\n
\r\n
[H00,P00001121] CONTEXT=PARAMETER : CLIENTID =&gt;
[H00,P00001121] CONTEXT=PARAMETER : TRANSACTIONID =&gt; 20190801143344970"
[H00,P00001121] CONTEXT=PARAMETER : KEY_TYPE =&gt; SERVICEID
[H00,P00001121] CONTEXT=PARAMETER : ORDERSOURCESYSTEM =&gt;

ただし、選択した行テキストのみを取得したり、他のグループ化など、他のものを探している可能性があるというメッセージが表示されます。その場合は、質問を更新してください。

おすすめ記事