Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在Bash中提取换行符和变量数据之间的字符串_Regex_Bash_Sed_Grep - Fatal编程技术网

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

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

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

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