Как получить данные новой строки при захвате ключевого слова?

Используемый вами часовой пояс должен быть указан в/etc/TZ

  1. убедитесь, что /tmp/TZсуществует
  2. проверить, существует ли /etc/TZ. Если нет, скопируйте файл TZиз /tmpв /etc
  3. .

Я вполне уверен, что /etc/config/timezoneдаже не нужен.

3
04.08.2019, 06:12
3 ответа

После проверки ввода текста 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 =>
[H00,P00001121] CONTEXT=PARAMETER : TRANSACTIONID => 20190801143344970"
[H00,P00001121] CONTEXT=PARAMETER : KEY_TYPE => SERVICEID
[H00,P00001121] CONTEXT=PARAMETER : ORDERSOURCESYSTEM =>

Предположим, что текст выглядит примерно так (Я обновлю свой ответ после того, как предоставленный текст будет отредактирован -обновлен)

Вы можете (предположить, что ваш ввод текста называется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 =>
[H00,P00001121] CONTEXT=PARAMETER : TRANSACTIONID => 20190801143344970"
[H00,P00001121] CONTEXT=PARAMETER : KEY_TYPE => SERVICEID
[H00,P00001121] CONTEXT=PARAMETER : ORDERSOURCESYSTEM =>

Тем не менее, что-то подсказывает мне, что вы, возможно, ищете что-то еще, например, получение только текста выбранной строки или, возможно, некоторую дополнительную группировку, если это так, пожалуйста, обновите свой вопрос.

0
27.01.2020, 21:33

Пара трюков, которые я использовал с выводом, подобным вашему.

1. Отфильтровать совпадающие строки с помощьюgrep

Обратите внимание, что нужные вам строки не содержат строку P00001121. Зная это, вы можете grepпоказать все строки, где эта строка отсутствует:

Пример

$ grep -v P00001121 afile
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/"/>

2. Выберите диапазон строк с помощью sed

.

Вы можете использовать sedдля выбора всех строк между двумя паттернами. Здесь я использую sed -n, чтобы подавить поведение sedпо умолчанию для печати каждой строки ввода. Затем мы сообщаем sedо том, что нужно сопоставить любые строки между двумя шаблонами, а затем печатать их(/p).

$ sed -n '/pattern1/,/pattern2/p' afile

Пример

$ sed -n '/^.*Server/,/^\\r\\n/p' afile
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
0
27.01.2020, 21:33

Это можно сделать с помощью grep, awkили sed.

grep -v H00 file.txt

Этот переключатель -vвыводит все строки, не содержащие эту строку.

sed -n '/Server/,/soap/p' file.txt

Это печатает строки между строками, содержащими эти строки.

awk '/Server/','/soap/' file.txt

Это выводит строки между строками, содержащими эти строки, как и выше, но использует awk.

Все они дают желаемый результат.

0
27.01.2020, 21:33

Теги

Похожие вопросы