Извлечь строку между новой строкой и переменными данными в Bash - PullRequest
0 голосов
/ 05 ноября 2018

В рамках нагрузочного теста у меня есть файл с сгенерированным списком запросов. Ниже представлен формат, в котором полезная нагрузка находится между двумя символами новой строки; GET указывает на начало нового запроса. Я хотел бы извлечь только полезную нагрузку.

Connection: false
Content-Length: 25

foo=bar1&foo2=bar2

GET http://localhost:1080/dasistgut

Я пробовал несколько комбинаций без успеха:

grep -zoP "(?<=(\n)).*(?<=(\GET))"  sample.txt
grep -zoP "(?<=(\n)).*(?<=(\n))"  sample.txt
grep -zoP "(?<=(\n)).*(?<=\n)"  sample.txt

Ожидаемый результат: foo=bar1&foo2=bar2

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы можете использовать это gnu grep:

var=$(grep -zoP '.+(?=\R{2}GET )' file)

echo "$var"
foo=bar1&foo2=bar2

утверждение Lookahead (?=\R{2}GET ) гарантирует, что на входе есть ровно 2 символа новой строки (\R), за которыми следует "GET " перед текущей позицией.


Альтернатива awk решение на основе:

awk '!NF{++n; next} n && /^GET /{print p} {p=$0; n=0}' file

foo=bar1&foo2=bar2
0 голосов
/ 05 ноября 2018

Используйте awk, чтобы сопоставить пустую строку, получить следующую строку и распечатать ее, а затем пропустить следующую строку (которая всегда должна быть пустой).

awk '/^$/ { getline; print; getline; }' sample.text
...