Regex 在Bash中提取换行符和变量数据之间的字符串
作为负载测试的一部分,我有一个包含生成的请求列表的文件。格式如下,其中,有效负载位于两个换行符之间;指示新请求开始的GET。我只想提取有效载荷Regex 在Bash中提取换行符和变量数据之间的字符串,regex,bash,sed,grep,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
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
grep-zoP”(?使用awk
匹配一个空行,获取下一行并打印它,然后跳过下一行(应该始终为空)
您可以使用此gnu grep
:
var=$(grep -zoP '.+(?=\R{2}GET )' file)
前瞻性断言(?=\R{2}GET)
确保输入在当前位置之前有两个确切的换行符(\R
),后跟“GET”
备选方案基于awk的解决方案:
awk '!NF{++n; next} n && /^GET /{print p} {p=$0; n=0}' file
grep
一次处理一行,您不能使用它来跨多行匹配。如果您编辑您的问题以显示您期望的结果,这会有所帮助。操作:您是否试图在两个空白行之间找到某个内容?仍然不清楚您想要什么输出。您是只想要一行输出,还是想要中间的所有内容n“内容长度”和“获取”(包括2个空行)。如果有多个有效负载的非空行,您想要什么?您想要输出中的最后一个空行吗?预期输出:foo=bar1&foo2=bar2,如描述中所述。抱歉,因为我认为我已经明确表示,我只想要有效负载,即,内容长度和GET之间的文本/正文字符串。第一个解决方案有效它与我在描述中提供的示例相反。虽然我确实提到它是一个文件的一部分,该文件有几千个这样的请求条目,但输出为空。awk替代方案对我有效,尽管它在迭代过程中有点慢。谢谢!它与我在描述中提供的示例相反。尽管我确实提到过t是一个文件的一部分,该文件有几千个这样的请求条目,但它会导致一个空白输出。@LP这只返回文件中的第一个有效负载。如果有几千个这样的请求,您想打印所有请求吗?我已更新了答案,以重复它,而不是退出。
echo "$var"
foo=bar1&foo2=bar2
awk '!NF{++n; next} n && /^GET /{print p} {p=$0; n=0}' file
foo=bar1&foo2=bar2