bash 非贪婪 grep 两个短语之间

bash 非贪婪 grep 两个短语之间

我正在运行curl 命令将数据发送到远程服务器。该命令的一部分--trace-ascii显示了curl 的完整输出。

我正在尝试 grep 这个输出,所以我只得到发布的数据。

这是输出的示例。我想捕获从x-www-form-urlencoded第一次出现开始的所有内容<= Recv SSL data

009c: Content-Length: 89
00b1: Content-Type: application/x-www-form-urlencoded
00e2: 
=> Send data, 89 bytes (0059)
0000: site=test&user=admin&description=Loca
0040: l system&location=NWE&site_id=67876&tel
0080: ephone=xxxxxx
== Info: upload completely sent off: 89 out of 89 bytes
<= Recv SSL data, 5 bytes (0x5)
0000: ....J
<= Recv SSL data, 1 bytes (0x1)
0000: .
== Info: TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
<= Recv SSL data, 57 bytes (0x10)

我正在使用的命令是: echo $OUTPUT | grep -Po '(?<=(x-www-form-urlencoded)).*(?= <= Recv SSL data)'

它返回从正确位置开始的数据,但也包括包含以下内容的所有行<= Recv SSL data

我只是想:

x-www-form-urlencoded
00e2: 
=> Send data, 89 bytes (0059)
0000: site=test&user=admin&description=Loca
0040: l system&location=NWE&site_id=67876&tel
0080: ephone=xxxxxx
== Info: upload completely sent off: 89 out of 89 bytes

我该怎么做呢 ?

谢谢

更新。这是使用的curl命令的示例:

OUTPUT=`curl -u user:passwprd -s  \
    -d "site=test" \
    -d "user=admin" \
    -d "description=Local system" \
    -d "location=NWE" \
    -d "site_id=67876" \
    -d "telephone=xxxxxx" \
--trace-ascii - -XPOST "https://x.x.x.x/test.php"`

我只想捕获发布的数据。

答案1

你的一般问题应该是量词贪婪。用 a.*?代替.*应该效果更好。

echo $OUTPUT |  grep -Po '(?<=(x-www-form-urlencoded)).*?(?=<= Recv SSL data)'

但我很惊讶你的 grep 对你这么有用。由于 grep 每行工作,我希望它不会匹配任何内容。

相关内容