我正在运行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 每行工作,我希望它不会匹配任何内容。