作为负载测试的一部分,我有一个包含生成的请求列表的文件。格式如下,因为有效负载在两个换行符之间;表示新请求开始的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
答案 0 :(得分:2)
您可以使用此gnu grep
:
var=$(grep -zoP '.+(?=\R{2}GET )' file)
echo "$var"
foo=bar1&foo2=bar2
前瞻性断言(?=\R{2}GET )
确保输入在当前位置之前有准确的2个换行符(\R
),后跟"GET "
。
替代基于awk
的解决方案:
awk '!NF{++n; next} n && /^GET /{print p} {p=$0; n=0}' file
foo=bar1&foo2=bar2
答案 1 :(得分:0)
使用awk
来匹配空白行,获取下一行并打印,然后跳过下一行(应始终为空白)。
awk '/^$/ { getline; print; getline; }' sample.text