在Bash中提取换行符和变量数据之间的字符串

时间:2018-11-05 15:30:44

标签: regex bash sed grep

作为负载测试的一部分,我有一个包含生成的请求列表的文件。格式如下,因为有效负载在两个换行符之间;表示新请求开始的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 :(得分: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